自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法题

happy number:https://leetcode.com/problems/happy-number/如果结果存在非1的循环,则不是happy number,所以可以通过检查结果是否存在循环来判断。一个可用的cycle detection算法是Floyd algorithm(也叫Tortoise and hare algorithm)。思想是设置两个指针p1,p2。p1一次移动一个

2020-04-01 09:19:25 151

原创 正常技巧题

implement queue using stack:https://leetcode.com/problems/implement-queue-using-stacks/用两个stack,stack1储存queue,stack2暂时储存stack1所pop出的数据,然后再pop stack2将数据push回stack1

2020-04-01 09:19:16 206

原创 hash table

Easy:happy number:https://leetcode.com/problems/happy-number/如果结果存在非1的循环,则不是happy number,所以可以通过检查结果是否存在循环来判断。一个可用的cycle detection算法是Floyd algorithm(也叫Tortoise and hare algorithm)。思想是设置两个指

2020-04-01 09:18:49 173

原创 Dynamic Programming

Easy:Paint Fence:https://leetcode.com/problems/paint-fence/设两个数组diff和same,分别表示第 i 个位置最后两个post颜色相同和颜色不同的组合数,则diff[i] = (k - 1) * diff[i - 1] + (k - 1) * same[i - 1],same[i] = diff[i - 1],最后返回diff[

2020-04-01 09:18:35 158

原创 数学技巧题

Nim Game:https://leetcode.com/problems/nim-game/n是4的倍数时一定失败add digits:https://leetcode.com/problems/add-digits/return 1 + (num - 1) % 9;

2020-04-01 09:18:23 147

原创 奇技淫巧题

move zeros:https://leetcode.com/problems/move-zeroes/找到第一个0,记录0的个数为count,将 a[i+count] 移动到 a[i]。可以理解为设定了两个指针number of 1 bits:https://leetcode.com/problems/number-of-1-bits/n &= n - 1; 一次可以去

2020-04-01 09:18:11 793

原创 Lintcode题目总结

方法技巧题:Complete Binary Tree: http://www.lintcode.com/en/problem/complete-binary-tree/用一个名为nodes的vector存储层序遍历的结果,在nodes[i] != NULL时将其左右儿子加入nodes。遍历了所有节点后,将nodes结尾的NULL节点pop_back,则nodes中剩下的节点中如果有NULL

2016-05-19 10:36:45 1420

原创 smart pointer

smart pointer是一种abstract data type,它能够模仿指针的行为,并且额外提供了一系列诸如自动内存管理、边界检查等特性,这些特性是为了在保证效率的基础上较少由于对指针的不正常使用而带来的bug。smart pointer能够自动进行object的销毁:当某个object的最后一个拥有者被destroy的时候(如局部变量离开了作用域),由smart pointer管理的ob

2016-03-26 12:13:41 993

原创 Standard Template Library (STL)基础

当在STL的语境中谈论vector、stack等数据结构时,它们通常被叫做container classiterator是可以实现访问container中数据的对象,是generalization of pointer,通常也是通过指针实现的,虽然它并不是指针。可以通过++,--,*,==,!=等进行处理,但并不是所有的iterator都支持这些操作符iterator可以分为以下几类:

2016-03-03 06:37:36 359

原创 I/O Stream

文件输入流的变量是ifstream,输出流是ofstream,它们包含在头文件中。stream变量必须通过open函数连接文件。一旦声明了输入/输出流并连接了文件,就可以用">>"/"每一个input-file stream都有成员函数eof来判断是否已读到文件结尾,当程序试图访问文件结尾后的一个字符时才会返回true(即遇到end-of-file标记时)#include...if

2016-02-25 11:47:54 435

原创 Hard题目总结

Binary SearchSearch in Rotated Sorted Array:https://leetcode.com/problems/search-in-rotated-sorted-array/两种方法:1)直接binary search,先判断mid在哪一段,然后判断mid和target的关系,如果结果可能在两段,再判断这段边界(left或right)和target

2016-02-16 00:03:35 1084

原创 Medium题目总结

方法技巧题:search a 2D matrix II:https://leetcode.com/problems/search-a-2d-matrix-ii/从左下角开始,如果元素大于target则行减1,如果小于target则列加1product of array except self: https://leetcode.com/problems/product-of-

2016-02-15 05:10:20 1145

原创 Exception Handling

int amount;try { cin >> amount; if(amount < 0) throw amount;}catch(int e) { cout << amount << " is negative\n";}C++中,基本的异常处理是try-throw-catch。try block中包含想要尝试执行的语句。上例中throw divisor;中的amount有时被

2016-02-14 12:07:00 612

原创 快速排序

该快速排序算法出自《算法导论》思想是,先利用一个partition函数将数组中大于pivot的元素放到右边,小于等于pivot的元素放到左边,然后用pivot将两个部分分割,返回pivot的位置p,再对子数组[start, p - 1]和[p + 1, end]进行排序即可。代码如下:void quickSort(vector& nums, int start, int end) { i

2016-02-06 05:02:49 270

原创 Bit Manipulation

number of 1 bits:https://leetcode.com/problems/number-of-1-bits/n &= n - 1; 一次可以去掉一个1,记录到 n == 0 执行的次数Missing Number:https://leetcode.com/problems/missing-number/将0 ~ N和所有的元素XORSin

2015-12-12 00:57:37 325

原创 Easy题目总结

正常技巧题implement queue using stack:https://leetcode.com/problems/implement-queue-using-stacks/用两个stack,stack1储存queue,stack2暂时储存stack1所pop出的数据,然后再pop stack2将数据push回stack1binary tree level or

2015-12-08 06:27:00 459

原创 template

template允许定义以数据类型为参数的函数和classtemplate这叫template prefix,它告知compiler它后面的函数定义是一个template并且T是type parameter,这里class的是指数据类型。当使用template时,只会对每一种使用的数据类型产生对应的函数/class定义许多compiler不支持template function decla

2015-11-06 06:10:59 1642

原创 Separate compilation & Namespace

data type由一系列值和对这些值的相关操作组成。abstract data type(ADT)是指使用这类data type的程序猿不需要知道其实现相关细节的data type。如果想用class实现ADT,需要将该type如何被使用和如何被定义的细节分开,达到不需要修改使用ADT的程序就能改变class实现方式的程度。应该遵守的法则有:1. 将所有的成员变量都设为private2.

2015-11-03 01:29:24 587

原创

class中成员函数定义时的"::"符号叫做scope resolution operator,它前面的类名通常叫做type qualifier。定义成员函数时,可以使用该类的data member和function member而不必使用".""::"用于类,"."用于对象;“==”符号不能用于object或structure;“=”却可以对object/structure进行互相赋值p

2015-11-02 05:53:41 517

原创 String & Vector

Stringstring类(class)在库中被定义,定义在std namespace中。注意,string是一个class可以使用"="对string对象进行赋值,用"+"连接两个string;不必考虑被赋值的string是否有足够的大小。C++可以自动地将双引号中的字符串转换成string类型。,=都可以直接对string对象进行比较string类有两个constructor,可以

2015-10-30 11:08:49 382

原创 C++基础

type cast:static_cast(9)overload function只能通过不同数量或类型的formal parameter来实现,而不能通过返回值类型的不同来实现void类型的函数可以通过return来终止call-by-reference的函数parameter只能是一个变量,而不能是常量或表达式。一个函数的parameter可以混合call-by-value和cal

2015-10-30 09:06:19 370

原创 图论算法

图的基础一个图(graph)G = (V,E)由顶点(vertex)集V和边(edge)集E组成。每一条边就是一个点对(v,w),v,w∈V。有时也把边叫做弧(arc)。如果点对是有序的,那么图叫做有向的(directed),有向的图叫做有向图(digraph)。当且仅当(v,w)∈E时,称顶点v和w邻接(adjacent)图中的一条路径(path)是一个顶点序列w1,w2,w3,...,

2015-10-10 02:32:16 2942

原创 排序

插入排序(insertion sort)插入排序由N-1趟排序组成,对于P = 1到P = N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。插入排序的平均情形是Θ(N^2)假设不存在重复的元素,有以下定理:【定理】N个互异的数的数组的平均逆序数是N(N-1)/4【定理】通过交换相邻元素进行排序的任何算法平均需要Ω(N^2)希尔排序(S

2015-09-29 05:11:36 594

原创 优先队列(堆)

优先队列是至少允许至少下列两种操作的数据结构:插入,和删除最小者(DeleteMin),它的工作是找出、返回并删除优先队列中最小的元素。简单的实现包括:1. 使用一个简单链表在表头以O(1)执行插入操作,并遍历该链表以删除最小单元,这又需要O(N)2. 始终让表保持排序状态;这使得插入代价高昂(O(N))而DeleteMin花费低廉(O(1))3. 使用二叉查找树,它对这两种操作的平均

2015-09-23 09:07:29 562

原创 散列

散列(hashing)是一种用于以常数平均时间执行插入、删除和查找的技术,但需要元素间任何排序信息的操作将不会得到有效的支持理想的散列表数据结构只是一个包含关键字的具有固定大小的数组;每个关键字被映射到从0~TableSize-1这个范围中的某个数,并且被放到适当的单元中。这个映射叫做散列函数(hash function),理想情况下它应该运算简单并且保证任何两个不同的关键字映射到不同的单元。

2015-09-14 10:26:03 470

原创 编译代码与Tarball

Linux下真正认识的可执行文件是二进制文件(binary program)。shell scripts其实是利用shell(如bash)的功能进行一些判断,最终的执行除了bash提供的功能外,仍然是呼叫一些已经编译好的二进制程序来执行。通过【file】指令可以对档案类型进行观察,如果是binary并且是可执行的时候,会显示类似"ELF 32-bit LSB executable"的字样,同时会说

2015-07-20 05:23:16 296

原创 系统设定工具(网络、打印机)与硬件侦测

Red Hat系列的Linux(RHEL, CentOS, Fedora)都支持"setup"工具对系统进行设定打印的行为被分为多个部分:1. 打印作业:打印软件产生打印动作的工作,这个打印作业会进入队列等待打印服务输出2. 打印队列:放置打印作业的项目,通常以打印机的名字来命名3. 打印服务:实际沟通队列内的打印作业与打印机的服务一般说的打印机驱动程序其实就是将打印作

2015-07-15 03:19:19 1267

原创 开机流程、模块管理与loader

系统的开机流程:1. 加载BIOS的硬件信息并进行自我检测,依据设定取得第一个可开机的装置2. 读取并执行第一个开机装置内MBR的boot loader(如grub等)3. 依据boot loader的设定加载kernel,kernel会开始侦测硬件与加载驱动程序4. 在硬件驱动成功后,kernel会主动呼叫init程序,而init会取得run level信息5. init执行

2015-07-13 04:06:29 622

原创 认识与分析登录档

登录档简单地说就是记录系统活动信息的几个档案,主要记录系统在什么时候由哪些程序进行了什么行为,发生了什么事件等常见的登录档:/var/log/dmesg:记录开机时核心侦测过程产生的信息/var/log/lastlog:记录系统中所有账号最近一次登录时的行管信息/var/log/mail.log:记录邮件的来往信息/var/log/syslog:系统发生的错误信息或是重要的信息

2015-07-09 09:14:22 752

原创

树一棵树是由N个结点和N-1条边的集合从结点n(1)到n(k)的路径(path)定义为结点n(1),n(2),...,n(k)的一个序列,且对1一棵树的内部路径长(internal path length)定义为所有结点的深度和假设所有的树出现的机会均等,则树所有节点的平均深度为O(log N)结点的深度(depth)为根到该结点唯一路径的长;节点的高(height)是从该结点

2015-07-09 03:40:36 400

原创 链表,栈,队列

使用链表时最好使用一个表头,也称为头结点。个人的感受是,使用头节点有一个好处那就是可以方便地修改链表中第一个结点的值。因为对链表中结点的操作通常都是通过调用函数,将指向节点的指针结点作为参数传入来进行更改的。但由于函数是call by value,若使用一个指针直接指向第一个结点, 这个指针指向的结点的值可以改变,但指针本身的值不能改变。例如要在链表的第一个结点前插入一个新的结点,如果指向第一个结

2015-07-09 00:58:05 290

原创 系统服务(daemons)

系统提供的服务称为service,而service需要进程的运行,完成某个service功能的进程称为daemon按照启动与管理方式,daemon可以分为:1. stand alone:可以自行单独启动这类daemon可以自行启动而不必通过其他机制进行管理,启动后会加载到内存中一直占用内存和系统资源,优点是持续提供服务,对客户端请求的响应速度快2. super daemon

2015-07-01 10:33:19 635

原创 数据结构基础

递归的四条基本法则:1. 基准情形:必须总有某些基本情形,无需递归就能解出2. 不断推进:对于那些需要递归求解的情形,每一次递归调用都必须使求解状况向接近基准情形方向推进3. 设计法则:假设所有的递归调用都能运行4. 合成效益法则:在求解一个问题的一个实例时,不能在不同的递归调用中做重复的工作1. 如果存在正的常数c和n0使得当N>=n0时,T(N)2. 如果存在正

2015-06-30 11:28:58 325

原创 C的高级数据表达

抽象数据类型(Abstract Data Types,ADTs)一个类型(type)确定了两方面的信息:一系列性质和一些列操作。要定义一个新的数据类型首先要提供存储数据的方式(比如定义一个结构体),然后还要提供处理数据的方式。将一个抽象的数据变具体有三步:1. 提供这个类型的性质和能够对它进行的操作的抽象描述,这个描述不应该局限于某个特殊的实现,甚至不应该被局限于某种编程语言。这种形式化的

2015-06-25 00:15:57 371

原创 C预处理器和C函数库

预处理器(Preprocessor)预处理器在程序被compile之前进行处理,它将程序中的符号缩写按照指示代替。预处理器可以按要求将其他文件包含进来,并可以选择哪些代码可以让compiler看到。预处理器并不了解C语言,它基本上只是将一些文字转换成另一些文字翻译(translate)程序的第一步:首先,在跳转至预处理之前,compiler要将程序经过一些翻译处理。compil

2015-06-22 23:11:11 867

原创 进程管理与SELinux初探

每一个进程都会获得一个PID,系统就是通过这个PID来判断这个进程是否有权限进行工作的。在Linux下执行一个指令时,系统会将相关的权限、属性、程序代码与数据等加载到内存中,并给予这个单元一个程序标识符(PID),该指令可以进行的任务就与这个PID有关当用bash提供的接口去执行另一个指令时,这个新的指令也会被触发形成新的进程(所以也会获得PID),这就是子进程,它父进程的PID是PP

2015-06-22 09:40:59 600

原创 C的结构体和其他数据形式

结构体声明结构体时其实并未创建真实的数据,也并未给数据分配空间,只是描述了它由哪些成员(member)组成struct tag {  ...};也忽略tag可以直接声明一个结构体变量,但这个结构体只能使用一次:struct {  ...} var_name;结构体的初始化,注意不同值之间用逗号(,)隔开,有两种方法:1. 按照顺序初始化:struct

2015-06-20 23:30:55 698

原创 Linux的计划任务(crontab)

Linux的计划任务有两种:1. at:可以处理仅执行一次就结束的任务,要执行at必须要有atd服务的支持2. crontab:重复执行的任务,要有cron(crond)服务的支持。除了可以使用指令执行外,还可以通过编辑/etc/crontab来进行Linux常见的计划任务:1. 登陆档的轮替(log rotate):因为Linux会一直记录系统的信息,所以登陆文件会越来越

2015-06-19 09:09:49 382

原创 C的文件IO

IO的层次:1. 底层IO:使用操作系统提供的的基础IO服务2. 标准IO:使用C函数库和头文件"stdio.h"提供的标准包C标准仅支持标准IO因为无法保证所有的操作系统使用相同的底层IO模型。标准IO除了便携性外,还有两个优点:a). 它有很多能够简化处理不同IO问题的特殊函数b). 输入和输出都是buffered的 return和exit的区别:1. 如果

2015-06-19 00:15:53 301

原创 C的存储类,链接与内存管理(Storage Class, Linkage, Memory Management)

C中,object指一块内存区域,一个object可以存储一或多个值。一个object可能还未存储任何值,但是它有存储一个恰当值的合适大小。"int entity = 3;"声明了一个叫做entity的identifier。identifier是一个名字,它指定一个具体object的内容,这个identifier就是C程序指定存储在硬件内存中object的方式。变量名并不是指定一个object的唯

2015-06-17 11:16:11 787

matlab人眼定位

matlab人眼定位代码 有注释 效果一般 可为初学者提供参考

2013-08-09

空空如也

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

TA关注的人

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