自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?

上一节我讲了冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是 O(n2),比较高,适合小规模数据的排序。今天,我讲两种时间复杂度为 O(nlogn) 的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,比上一节讲的那三种排序算法要更常用。归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题,比如:如何在 O(n) 的时间复杂...

2018-12-28 13:24:00 504

原创 11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

 排序算法太多了有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。我按照时间复杂度把它们分成了三类。思考题:插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?...

2018-12-28 10:06:46 262

原创 Qt发布可执行程序(Qt Widgets Application)

1)以Release 方式编译生成 exe 程序:   生成的程序运行正常之后,找到项目的生成目录,比如 项目源码路径:C:\QtPros\hellomw\ 。   它的项目生成目录是 C:\QtPros\build-hellomw-Desktop_Qt_5_4_0_MinGW_32bit-Release\ 。   进入这个文件夹,在进入它的子文件夹 release 里面,找到 hello...

2018-12-27 14:28:54 2684

转载 Linked List Cycle

给定一个单链表,判断其中是否有环,已经是一个比较老同时也是比较经典的问题,在网上搜集了一些资料,然后总结一下大概可以涉及到的问题,以及相应的解法。首先,关于单链表中的环,一般涉及到一下问题:1.给一个单链表,判断其中是否有环的存在;2.如果存在环,找出环的入口点;3.如果存在环,求出环上节点的个数;4.如果存在环,求出链表的长度;5.如果存在环,求出环上距离任意一个节点...

2018-12-19 21:52:14 184

原创 10 | 递归:如何用三行代码找到“最终推荐人”?

如何理解“递归”?递归是一种应用非常广泛的算法(或者编程技巧)。比如 DFS 深度优先搜索、前中后序二叉树遍历等等。周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办?别忘了你是程序员,这个可难不倒你,递归就开始排上用场了。于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看不...

2018-12-19 15:48:58 314 1

原创 09 | 队列:队列在线程池等有限资源池中的应用

   CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种处理策略又是怎么实现的呢?实际上,这些问题并不复杂,其底层的...

2018-12-19 15:09:48 164

原创 08 | 栈:如何实现浏览器的前进和后退功能?

后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。特定的数据结构是对特定场景的抽象,而且,数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,自然也就更容易出错。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。栈...

2018-12-18 14:18:01 351

原创 07 | 链表(下):如何轻松写出正确的链表代码?

技巧一:理解指针或引用的含义有些语言有“指针”的概念,比如 C 语言;有些语言没有指针,取而代之的是“引用”,比如 Java、Python。不管是“指针”还是“引用”,实际上,都是存储所指对象的内存地址。将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。p->next=q。这行代码是...

2018-12-18 14:17:30 205

原创 06 | 链表(上):如何实现LRU缓存淘汰算法? Linked List

缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用...

2018-12-18 14:17:00 321

原创 05 | 数组:为什么很多编程语言中数组都从0开始编号?

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。1)线性表(Linear List)就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。 2)...

2018-12-18 14:15:59 238

原创 04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度

最好情况时间复杂度就是,在最理想的情况下,执行这段代码的时间复杂度。最坏情况时间复杂度就是,在最糟糕的情况下,执行这段代码的时间复杂度。平均时间复杂度:用代码在所有情况下执行的次数的加权平均值表示。均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度...

2018-12-18 14:15:17 192

原创 03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

事后统计法:(把代码跑一遍,通过统计、监控,就能得到算法的执行时间和占用的空间大小)1)测试结果非常依赖测试环境,测试环境中硬件的不同会对测试结果有很大的影响。2)测试结果受数据规模的影响很大。待排序数据的有序度不一样,排序的执行时间就会有很大的差别。 在不运行代码的情况下,用“肉眼”得到一段代码的执行时间;所以代码的执行时间T(n)与每行代码的执行次数n成正比 ~~~  ...

2018-12-18 14:14:48 350

原创 02 | 如何抓住重点,系统高效地学习数据结构与算法?

从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。因为数据具有随机访问的特点,常用的二分查找算法需要用数据来存储数据。但如果我们选择链表这种数据结构,二分查找算法就无法工作了,因为链表不支持随机访问。数据结构是静态的...

2018-12-18 14:13:34 344

原创 单链表的反转

#include <iostream>#include <malloc.h>using namespace std;typedef struct ListNode{ int val; ListNode *next;}Node,*PNode;/*创建一个节点数为n的链表*/PNode CreateList(int len){ in...

2018-12-18 07:30:06 102

原创 单链表的创建与基本操作

链表通过“指针”将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。如图所示,我们把这个记录下个结点地址的指针叫作后继指针 next。把第一个结点叫作头结点,把最后一个结点叫作尾结点。其中,头结点用来记录链表的基地址。而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址 N...

2018-12-17 13:29:44 2746

原创 QML播放本地视频或网络摄像头视频

(1)利用定时器,通过采集图像的方式 Image{        id:img       Timer{           id:timer           interval:300           repeat:true           //triggeredOnStart:true           running:true         

2018-01-08 20:05:48 4158

原创 CPU两大架构X86 和 ARM

(1)中央处理单元(CPU):  主要由运算器、控制器、寄存器三部分组成。运算器就是起着运算的作用,控制器就是负责发出CPU每条指令所需要的信息,寄存器就是保存运算或者指令的一些临时文件,这样可以保证更高的速度。  CPU有着处理指令、执行操作、控制时间、处理数据四大作用。移动设备很复杂, CPU需要执行数以百万计的指示,才能使它向期待的方向运行,而CPU的速度和功率效率是至关重要的。速度

2018-01-08 19:00:49 12019 4

单链表的反转(原地反转法 && 新建链表插入法)

c++ 实现单链表的反转(原地反转法 && 新建链表插入法)

2018-12-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除