- 博客(91)
- 资源 (23)
- 收藏
- 关注
原创 剑指offer 编程题(59):二叉搜索树的第k个结点
二叉搜索树的第k个结点/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {publ
2017-12-31 17:51:38 210
原创 剑指offer 编程题(58):序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树class Solution {public: string str; string serializeHelper(TreeNode *root) {//按先序DFS序列化 if(root==NULL){ str+="#,"; return str;
2017-12-31 17:17:12 213
原创 剑指offer 编程题(57):二叉树的之字形打印
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x)
2017-12-30 12:26:51 187
原创 剑指offer 编程题(56):二叉树的层次遍历
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }
2017-12-30 11:02:52 260
原创 剑指offer 编程题(55):中序二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。class Solution {public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode==nullptr) return nullptr; //情况1.空树,返回空
2017-12-29 22:22:13 225
原创 剑指offer 编程题(54):删除链表中重复的结点
删除链表中重复的结点 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next
2017-12-29 17:06:40 322
原创 剑指offer 编程题(53):链表中环的入口结点
一个链表中包含环,请找出该链表的环的入口结点。断链法 时间复杂度为O(n)两个指针,一个在前面,另一个紧邻着这个指针,在后面。 两个指针同时向前移动,每移动一次,前面的指针的next指向NULL。 也就是说:访问过的节点都断开,最后到达的那个节点一定是尾节点的下一个, 也就是循环的第一个。 这时候已经是第二次访问循环的第一节点了,第一次访问的时候我们已经让它指向了NULL, 所
2017-12-29 12:15:44 287
原创 剑指offer 编程题(52):字符流中第一个不重复的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。class Solution{public: //Insert one char from strin
2017-12-28 16:48:25 196
原创 剑指offer 编程题(51):字符串形式的数值判断
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。class Solution {public: bool isNumeric(char* str) { int flag
2017-12-28 16:26:03 225
原创 剑指offer 编程题(50):乘积数组
题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。class Solution {public: vector<int> multiply(const vector<int>& A) { vector<int> B; i
2017-12-28 11:36:46 234
原创 剑指offer 编程题(49):数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。详见剑指offer27class Solution {public: // Parameters: //
2017-12-27 19:31:11 284
原创 剑指offer 编程题(48):string to int
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0 示例1 输入+2147483647 1a33 输出2147483647 0class Solution {public: int StrToI
2017-12-27 19:06:06 199
原创 剑指offer 编程题(47):不用算数运算符实现加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。class Solution {public: int Add(int num1, int num2) { int sum = num1 ^ num2; int carry = num1 & num2; while (carry) {
2017-12-27 18:23:15 228
原创 剑指offer 编程题(46):求1+2+3+...+n
题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Solution {public: int Sum_Solution(int n) { if(n == 1) return n; int sum = n+Sum_Soluti
2017-12-27 16:29:46 400
原创 剑指offer 编程题(45):圆圈中最后剩下的数(约瑟夫环)
class Solution {public: struct node { int no; node *next; }; int LastRemaining_Solution(int n, int m) { node *head=new node; head->no=n-1; h
2017-12-27 15:15:46 269
原创 剑指offer 编程题(44):扑克牌顺子
0代表任意数,判断数组是否为顺子。class Solution {public: bool IsContinuous( vector<int> numbers ) { if(numbers.size() <= 0) { return false; } int arr[14] ={0};
2017-12-26 17:06:26 279
原创 剑指offer 编程题(43):翻转单词顺序列
例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?class Solution {public: string ReverseSentence(string str) { if("" == str) ret
2017-12-26 15:53:35 280
原创 剑指offer 编程题(42):左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!class Solution {public: string LeftRotateString(str
2017-12-26 15:47:55 209
原创 剑指offer 编程题(41):查找两数之和一定,乘积最小
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<in
2017-12-26 13:24:43 398
原创 剑指offer 编程题(40):和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述: 输出所有和为S的连续正数序列。序
2017-12-25 21:36:53 225
原创 剑指offer 编程题(39):判断是否是平衡二叉树
AVL的定义 平衡二叉查找树:简称平衡二叉树。由前苏联的数学家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉树,根据科学家的英文名也称为AVL树。它具有如下几个性质:可以是空树。 假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过1 平衡之意,如天平,即两边的分量大约相同。如定义,假如一棵树的左右子树的高度之差超过1,如左子
2017-12-25 19:57:28 200
原创 剑指offer 编程题(38):数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { if(data.size() <= 0) { return
2017-12-25 18:26:02 284
原创 剑指offer 编程题(37):求树的高度(深度)
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int
2017-12-25 15:21:40 289
原创 剑指offer 编程题(36):数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数。可以按统计字符的方法 与剑指offer 编程题(27):数组中出现次数统计解题思路和方法一样 http://blog.csdn.net/coolwriter/article/details/78867632 剑指offer 编程题(33):第一个只出现一次的字符 http://blog.csdn.net/coolwriter/article/d
2017-12-25 14:52:44 306
原创 剑指offer 编程题(35):链表公共点
题目描述 输入两个链表,找出它们的第一个公共结点。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNod
2017-12-24 12:18:04 156
原创 剑指offer 编程题(34):数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述:题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,s
2017-12-24 10:25:43 221
原创 剑指offer 编程题(33):第一个只出现一次的字符
与剑指offer 编程题(27):数组中出现次数统计解题思路和方法一样 http://blog.csdn.net/coolwriter/article/details/78867632 题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置class Solution {public: int FirstNotRepea
2017-12-23 16:51:00 236
原创 剑指offer 编程题(32):第N个丑数
题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数任意一个丑数一定是另一个丑数乘以2或3或5得到的,我们可以使用一个数组将已经确认为丑数的数按照从小到大的顺序记录下来,每个丑数都是前面的丑数乘以2、3或5得来的。 如何确保数组中的丑数是排好序的?假设
2017-12-23 12:29:53 471
原创 剑指offer 编程题(31):把数组排成最小的数返回string
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。class Solution {public: static bool compare( const string &st1,const string &st2) {
2017-12-22 21:39:55 225
原创 剑指offer 编程题(30):自然数中出现1的次数
暴力破解法:class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int count = 0; for(int i=0; i<=n; i++){ int temp = i; //如果temp的任意位为1则count++
2017-12-22 16:59:15 395
原创 剑指offer 编程题(29):连续子序列和最大
class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { int sum = array[0]; int maxsum = array[0]; for(int i = 1;i<array.size();i++){ sum = s
2017-12-22 16:10:24 422
原创 剑指offer 编程题(28):最小的K个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res; int
2017-12-21 22:36:06 223
原创 剑指offer 编程题(27):数组中出现次数统计
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) { if(n
2017-12-21 20:52:34 444
原创 剑指offer 编程题(26):字符串全排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。递归做法有时候递归的效率使得我们不得不考虑除此之外的其他实现,很多把递归算法转换到非递归形式的算法是比较难的,这个时候我们不要忘记了标准模板库STL已经实现的那些算法,这让我们非常轻松。 STL有一个函数next_pe
2017-12-21 11:28:19 393
转载 最大连续子序列和
最大连续子序列和问题对于形如:int arr[] = { 1, -5, 3, 8, -9, 6 };的数组,求出它的最大连续子序列和。若数组中全部元素都是正数,则最大连续子序列和即是整个数组。若数组中全部元素都是负数,则最大连续子序列和即是空序列,最大和就是0。方法一用sum[i,j]表示arr[i]到arr[j]的和,则显然可以通过
2017-12-21 10:43:39 320
转载 二叉搜索树
定义二叉搜索树(Binary Search Tree)或称二叉查找树,也称二叉排序树(Binary Sort Tree)。它或者是一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有节点的值均小于它的根节点的值;若右子树不空,则右子树上所有节点的值均大于它的根节点的值;左、右子树也分别为二叉搜索树;性质二叉搜索树与普通二叉树相比,有一些优秀的特征或性质
2017-12-21 10:40:40 245
转载 二叉树前序、中序、后序遍历非递归写法
前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的: [cpp] view plain copy//Binary Tree Node
2017-12-21 10:37:43 270
原创 剑指offer 编程题(25):二叉树搜索与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。在二叉搜索树中,每个结点都有两个分别指向其左、右子树的指针,左子树结点的值总是小于父结点的值,右子树结点的值总是大于父结点的值。而在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个结点。所以这两种数据结构的结点是一致,二叉搜索树之所以为二叉搜索树,双向链表之所以为
2017-12-20 16:28:51 284
原创 剑指offer 编程题(24):链表复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)递归法class Solution {public: RandomListNode* Clone(RandomListNode* pHead) {
2017-12-20 14:27:12 220
原创 二叉树最大路径之和
Binary Tree Maximum Path Sum 解题思路: 这道题是求树的路径和的题目,不过和平常不同的是这里的路径不仅可以从根到某一个结点, 而且路径可以从左子树某一个结点,然后到达右子树的结点,就像题目中所说的可以起始和终结于任何结点。 在这里树没有被看成有向图,而是被当成无向图来寻找路径。 因为这个路径的灵活性,我们需要对递归返回值进行一些调整,而不是通常的返回要求的结果。
2017-12-20 11:33:45 408
iTOP-4412-LinuxC-摄像头ov5640-500W测试方法.zip
2018-02-04
iTOP-4412内核和Android驱动以及Android测试例程
2018-02-04
python冒泡排序程序
2018-02-04
树莓派摄像头资料和例程
2017-09-01
putty远程连接工具
2017-09-01
Win32DiskImager树莓派写入镜像工具
2017-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人