自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

quinn的专栏

我的学习笔记 - 数据结构和算法,图像处理算法

  • 博客(52)
  • 资源 (7)
  • 收藏
  • 关注

原创 排序算法总结

本文将给出六大经典排序的实现。 简单排序算法:冒泡,插入,选择 改进排序算法:快排,归并,堆排以下排序用到的交换函数:void swap(int &A, int &B) { int temp = A; A = B; B = temp;}1. 冒泡排序2个相邻的元素相互比较,不满足顺序则交换;每遍历一次数组,使一个元素处于最终位置。 时间复杂度O(n2)O(n^2) 空间复杂度O(1)

2015-07-28 15:51:53 1022

原创 二叉树各种操作的总结

求二叉树中的节点个数求二叉树中叶子节点的个数求二叉树的深度求二叉树第K层的节点个数递归遍历前序中序后序非递归遍历前序中序后序层序1 前序遍历2 中序遍历3 后序遍历4 层序遍历将二叉查找树变为有序的双向链表判断两棵二叉树是否结构相同判断二叉树是不是平衡二叉树判断二叉树是否是搜索二叉树求二叉树中两个节点的最低公共祖先节点求二叉树中节点的最大距离由前序遍历序列和中序遍历序列重建二叉树

2015-07-26 11:43:48 5702 1

原创 key-value 多线程服务器的Linux C++实现

项目需求总体思路网络通信字符解析数据存储与查询1 存储管理2 数据查询多线程待改进GitHub源码项目需求 设计一个基于Socket或基于HTTP的服务器,服务内容是提供一种简单的key/value映射关系的管 理与查询 下面的所有操作都是通过结构体Node来传递的: struct Node { char key[KEY_SIZE];

2015-07-17 15:09:58 2552

原创 46 - 不使用 乘除、循环和判断 语句实现 1+...+n

题目: 求 1 + 2 + … + n. 要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句(A?B:C)要实现 1 + 2 + …+ n 不管是循环实现还是递归实现都必须有终止条件。思路一循环是让相同的代码执行 n 遍。 使用构造函数和静态成员变量实现。构造 n 个类,构造函数会执行 n 次,用静态变量实现 i 递增, sum 求和。#inc

2015-07-31 17:06:55 718

原创 47 - 按位实现加减乘除 四则运算

不使用+-*/四则运算符,实现两个数的四则运算。1. 加用二进制位实现两个数之间的加法。 如 9+15=24 1001 + 1111,由于二进制 0+0=0,1+0=1, 0+1=1, 1+1=0, 可以发现是异或运算,而产生进位,则只有1 ,1相加,即与运算。int add(int nums1, int nums2) { if (nums1 == 0 || nums2 == 0)

2015-07-31 16:42:23 1263

原创 45 - 圆圈中最后剩下的数字

题目要求: 0, 1, … , n-1 这 n 个数字排成一个圈,从数字 0 开始每次从这个圈里删除第 m 个数字。求这个圈剩下的最后一个数字。本题是约瑟夫环问题。 除了以下给出的2中解法,更高级的算法:约瑟夫问题的两个O(log n)解法1. 环形链表由于要不断地从圈里删除一个数字,容易想到用链表实现。用链表将这 n 个数字存储,头尾相连,每隔 m 个删除一个,最后剩下的即为结果。 由于

2015-07-30 21:50:28 679

转载 C++ 运算符 优先级

C++ Operator Precedence C++ C++ language Expressions The following table lists the precedence and associativity of C++ operators. Operators are listed top to bott

2015-07-30 20:09:56 640

原创 44 - 判断扑克牌是否是顺子

题目: 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。首先应该对该问题做数据抽象,5张普通牌可以用数字代替,大小王是特殊牌,我们可以用 0 代替。将大小王和普通牌分离。 检查是否是顺子: 首先应该进行排序,然后统计 0 的个数, 最后统计相邻数字之间的间隔个数。 如果 0 的次数 大于等

2015-07-30 16:55:45 5704

原创 42 - 反转单词的顺序 | 左旋转字符串

1. 反转单词的顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。先反转整个句子中的字符顺序,再反转每个单词中的字符顺序; 或者先反转每个单词中的字符顺序,再反转整个句子中的字符顺序。#include <iostream>

2015-07-29 21:18:46 600

原创 41 - 找出数组中和为sum的 2个数字 | 找出和为sum的连续正整数序列

1. 找出数组中和为sum的 2个数字输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出任意一对。 2. 找出和为sum的连续正整数序列

2015-07-29 19:49:41 1224

原创 40 - 找出数组中只出现一次的数字

题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。编写程序找出这个两个只出现一次的数字。要求时间复杂度O(n),空间复杂度O(1). 如 {2,4,3,6,3,2,5,5},输出{4,6}解析: 空间复杂度为O(1)断绝了用hash-table的思路,时间复杂度O(n)断绝排序的思路。如何判断一个数字出现2次呢?计数异或:如果出现2次,任意数字和自己异或都为0异或的性质

2015-07-29 17:03:10 592

原创 38 - 数字在排序数组中的次数

题目描述: 统计一个数字在排序数组中出现的次数。 如输入排序数组 {1,2,3,3,3,3,4,5} 和数字3,由于 3 在数组中出现了 4 次,因此输出 4.解析: 在有序数组中查找一个数可以联想到二分查找。 如例子中,要查找3的次数,二分查找,找到3后,它的左右两边可能都有3,因此两边都要查找,如果3在数组中出现了n次,则时间复杂度O(n),二分查找没有起到作用。假设我们要在数组中查找

2015-07-29 15:21:40 619

原创 37 - 两个链表的第一个公共节点

题目描述: 输入两个链表,找出它们的第一个公共结点。如:第一个公共节点为值为 6 的节点. 相关题型:在二叉树中找出两个节点的最低公共祖父节点。使用的算法是:找出根到2个节点的路径,然后从根遍历,当最后一个相同的节点,即为最低公共祖父节点。思路一: 在本题中,如果我们能从最后 1 个节点(如bst中的根) 向前遍历,则很容易找出第一个公共节点,但是单链表只能从前向后遍历。而给定从前到后,如何得

2015-07-29 11:26:07 968 1

原创 35 - 找出字符串中第一个只出现一次的字符

在一个字符串中找到第一个只出现一次的字符。 如输入”abaccdeff”,输出’b’解析: 使用一个数组,记录每个字符出现的次数,最后遍历计数数组,第一个个数为 1 的即为结果。 由于字符char,只有8 bit, 只有255种可能,因此只需声明一个255大小的数组。遍历一次字符串,遍历2次计数数组:时间复杂度O(n) 空间占用255*int = 512 Byte,是一个固定大小:空间复杂度

2015-07-28 22:46:56 1532

原创 34 - 丑数

题目描述:http://ac.jobdu.com/problem.php?pid=1214 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解析: 丑数的定义应该为:质因子只含有2、3、5的数 。1 默认是一个丑数。 e.g. 8 = 2*2*2; 18 = 2

2015-07-28 22:15:26 659

原创 33 - 把数组排成最小的数

题目描述:http://ac.jobdu.com/problem.php?pid=1504 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。容易观察到: 对于3, 32 : 323 < 332 ,因此 32应该在3之前 对于3,321 : 3213 < 3321,因此

2015-07-28 20:37:35 572

转载 gdb结合coredump定位崩溃进程

原文链接:http://lazycat.is-programmer.com/posts/31925.html此方法只能定位崩溃进程,不能检查内存泄露。Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位。 如何产生core file?我们可以使用ulimit这条命令对core file文件的大小进行设定

2015-07-28 17:32:33 667

转载 static 、const 、 define 、inline

原文链接:#define和inline 的区别define:定义预编译时处理的宏;  只进行简单的字符替换,无类型检测typedef:定义类型别名 用于处理复杂类型  例: typedef int A;  则:A a; //定义a为intinline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝  既为提出申请,不一定会成功 

2015-07-28 09:48:10 469

原创 31 - 连续字数组的最大和

题目要求: 输入一个整型数组,有正数也有负数。数组中一个或连续的多个整数组成一个字数组。求所有子数组和的最大值。要求时间复杂度O(n).leetcode | Maximum Subarray 最大连续子序列的和: http://blog.csdn.net/quzhongxin/article/details/46603957当前和是大于0,则对最大和是有贡献的,保留; 当前和是小于0,则对最大

2015-07-27 19:48:52 944

原创 30 - 找出最小的k个数

题目描述:http://ac.jobdu.com/problem.php?pid=1371 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。第一种思路: 如上一题中,用快速排序中的划分函数,划分元素最终下标index小于K,划分[index+1, n];划分元素最终下标index大于K,划分[0, index-1]; 找到

2015-07-27 17:22:12 782

原创 29 - 数组中出现次数超过一半的数字

题目描述:http://ac.jobdu.com/problem.php?pid=1370 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。直观想法是,先排序O(nlgn),那么下标是 n/2 的位置上一定是超过数组长度一半的数字。另一种思路是: 用快排里

2015-07-27 16:31:39 639

原创 28 - 字符串的全排列和组合

字符串的排列题目描述:http://ac.jobdu.com/problem.php?pid=1369 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。分两步: 第一步:求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符都交换一次; 第二步:固定第一个位置

2015-07-27 15:48:24 1013

转载 26 - 复杂链表的复制

题目描述:http://ac.jobdu.com/problem.php?pid=1524 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。注:以下解析来自程序员面试题精选100题(49)-复杂链表的复制[算法]精简。第一步,为原始链表的每个节点N创建对应的节点N’,并把N’插入到N的后面第二步,设置复制出来的节点的sibling, N’的

2015-07-27 11:50:47 399

原创 25 - 二叉树中和为某一值的路径

题目描述:http://ac.jobdu.com/problem.php?pid=1368 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解析: 需要找出从根节点到叶节点的路径和等于target,可以想到用深度搜索(前序遍历)方式,当访问某节点时,将该节点添加到路径上,如果该节点是叶节点且恰好等于tar

2015-07-27 09:45:18 703

原创 24 - 判断是否是二叉搜索树的后序遍历序列

剑指offer 24题 题目描述:http://ac.jobdu.com/problem.php?pid=1367 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。搜索二叉树的特征: 左子树的节点小于根右子树的节点大于根任意子树都是搜索二叉树而后序遍历时,左右根,序列的最后一项总是根。在序列中找到根

2015-07-26 16:15:29 1231

原创 51 - 数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。解析: 方法一: 如果可以占用额外空间,可以不断的将数组中的数字压入hash-table,逐个的去hash-table中查找,如果找到则说明是有重复的。空间复杂度O(n),时间复杂度O(n)方法二: 但如果不能占用额外空间:

2015-07-26 09:44:34 690

原创 3 - 在有序二维数组中查找元素

题目描述:http://ac.jobdu.com/problem.php?pid=1384在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析: 由于每一行是递增的,每一列是递增的,如果我们从左上角开始查找,那么当查找元素比左上元素大时,无法判断是应该向下、向右还是向右下;从右下

2015-07-25 22:12:36 659

原创 4-代替字符数组中的空格

题目描述:http://ac.jobdu.com/problem.php?pid=1510 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为”We Are Happy.“则经过替换之后的字符串为“We%20Are%20Happy.”解析: 直观的想法是,新建一个数组,逐个复制,遇到空格时,写入%20,但这需要占用额外空间。 不占用额外空间的算法是原位替换。如果我们顺序的遍

2015-07-25 22:01:20 720

原创 5-从尾到头打印链表

题目描述:http://ac.jobdu.com/problem.php?pid=1511 输入一个链表,从尾到头打印链表每个节点的值。 输入: 每个输入文件仅包含一组测试样例。 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。 输出: 对应每个测试案例,以从尾到头的顺序输出链表每

2015-07-25 21:45:14 552

原创 剑指 | 7-利用两个栈构建一个队列

题目描述:http://ac.jobdu.com/problem.php?pid=1512 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解析: 定义2个栈s1, s2 1. 开始时,将元素push进s1 2. front()或pop()时,将s1的数据,出栈,顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序。 3. 再次push时,仍然

2015-07-25 21:35:32 905

原创 leetcode | Minimum Path Sum

Minimum Path Sum : https://leetcode.com/problems/minimum-path-sum/Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers a

2015-07-25 21:18:10 561

原创 leetcode | Insert Interval

Insert Interval : https://leetcode.com/problems/insert-interval/Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).You may assume that the intervals

2015-07-25 20:33:17 648

原创 leetcode | Merge Intervals

Merge Intervals : https://leetcode.com/problems/merge-intervals/Given a collection of intervals, merge all overlapping intervals.For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15

2015-07-25 17:28:03 522

原创 leetcode | ZigZag Conversion

ZigZag Conversion : The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A

2015-07-20 16:40:27 612

原创 leetcode | Maximum Gap

Maximum Gap: https://leetcode.com/problems/maximum-gap/ Given an unsorted array, find the maximum difference between the successive elements in its sorted form.Try to solve it in linear time/space.Ret

2015-07-20 15:05:36 597

原创 线性排序之基数排序,桶排序,计数排序

基数排序计数排序桶排序基数排序,桶排序,计数排序是三种线性排序方法,突破了比较排序的O(nlogn)的限制。但是只适用于特定的情况。基数排序以下为维基百科的描述: 基数排序 : 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 基数排序的方式可以采用L

2015-07-20 11:03:48 1896

原创 leetcode | Intersection of Two Linked Lists

Intersection of Two Linked Lists : https://leetcode.com/problems/intersection-of-two-linked-lists/Write a program to find the node at which the intersection of two singly linked lists begins.For exampl

2015-07-18 19:54:43 503

原创 leetcode | Power of Two

Power of Two : https://leetcode.com/problems/power-of-two/ Given an integer, write a function to determine if it is a power of two.判断一个数是否是2的幂? 当无从下手时,可以根据例子找出规律。对于1,2,4,8,16它们的二进制表示分别是: 1: (1) 2:

2015-07-18 19:21:50 526

原创 leetcode | sqrt(x)

sqrt(x) : https://leetcode.com/problems/sqrtx/Implement int sqrt(int x). Compute and return the square root of x.解析: 容易想到的是用二分法去试,但收敛速度太慢,不能满足时间要求。 我们知道求根公式,牛顿迭代法 点击查看维基百科 首先,选择一个接近函数f(x)零点的x_0,计

2015-07-18 18:47:38 622

原创 leetcode | Pow(x, n)

Pow(x, n) : https://leetcode.com/problems/powx-n/Implement pow(x, n).解析: 同剑指offer: 数值的整数次方 | Power本题考查的关键点有:double 不能使用“==” 0 不能取负数次幂任何数的 0 次幂为 11的任何次幂为1-1的偶数次幂为1,奇数次幂为-1如何快速的计算一个数的整数次幂注意: 关于基数

2015-07-18 16:49:14 579

LRU页面缓存-磁盘

HashCache 实现了一种基于文件页的LRU Cache 功能,通过建立磁盘缓存的模式,实现了对磁盘文件的快速查找。

2015-07-01

动态规划四个经典问题的c++实现

四种经典动态规划:钢条切割求最大收益问题、矩阵链相乘求最小乘法次数问题、最长公共子序列问题、求最小的搜索代价的最优二叉搜索树的c++代码实现。 对应blog

2015-06-22

摄像头预览软件 包含源码

摄像头预览软件,功能简单,支持双摄像头、单摄像头的预览,开发源码基于opencv+vs

2015-06-14

Smart Vision for Managed Home Care

提供了家庭视频监护中的前景分割,背景建模更新,人的提取检测等一些思想

2015-05-07

hash散列表的三种实现

散列的C语言实现:链地址法、线性探测法、双重散列表

2015-04-22

二项堆的基本操作实现

二项堆(Binomial Heap)是二项树(Binomial Tree)的集合(collection)

2015-04-08

快速排序的基本算法和改进实现

快速排序算法改进--小的子文件、三者取中、重复关键字三路划分

2015-03-18

空空如也

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

TA关注的人

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