![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
zd_njupt
这个作者很懒,什么都没留下…
展开
-
STL算法之查找对象
beg,end:表示元素范围的迭代器。unaryPred和binaryPred是一元和二元谓词,即分别接受一个和两个参数,都是来自输入序列的元素。一:简单查找算法1.findfind(beg,end,val)函数原型为:template<class _InIt,class _Ty> inline _InIt find(_InIt _First, _InIt _Las...原创 2018-05-23 16:43:42 · 183 阅读 · 0 评论 -
剑指offer 37、38:数字在排序数组中出现的次数 、二叉树的深度
36:题目描述 统计一个数字在排序数组中出现的次数。 思路:二分法查找class Solution {public: int process(vector<int>&data,float k) { int left=0,right=data.size()-1; int mid=0; while(left&...原创 2018-08-04 16:38:10 · 141 阅读 · 0 评论 -
剑指offer 53、54:表示数值的字符串 、字符流中第一个不重复的字符
53.题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。class Solution {public: bool isNumeric(char* string) { ...原创 2018-08-09 12:01:50 · 140 阅读 · 0 评论 -
剑指offer 39、40:平衡二叉树 、数组中只出现一次的数字
39.题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路:平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1 1.从下往上计算每个节点的深度,存在问题:即使子树不符合,也要...原创 2018-08-05 15:09:16 · 126 阅读 · 0 评论 -
剑指offer 41、42:和为S的连续正数序列 、和为S的两个数字
41:题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续...原创 2018-08-06 09:07:26 · 92 阅读 · 0 评论 -
剑指offer 43、44:左旋转字符串、翻转单词顺序列
43.题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 思路:XY -> YX (XT YT)T==YX 每个子串反转后,再总体反转。...原创 2018-08-06 09:50:29 · 117 阅读 · 0 评论 -
剑指offer 55、56:链表中环的入口结点 、删除链表中重复的结点
55.题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ...原创 2018-08-10 11:16:25 · 115 阅读 · 0 评论 -
剑指offer 57、58:二叉树的下一个结点 、对称的二叉树
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路:如果有右子树,则下一节点就是右子树的最左边的节点。 如果没有右子树,并且是父节点的左子树,则下一节点是父节点 如果没有右子树,并且是父节点的右子树,找父节点的父节点,直到父节点位于左子树/*struct TreeLinkNode {...原创 2018-08-10 12:10:59 · 126 阅读 · 0 评论 -
剑指offer 59、60:按之字形顺序打印二叉树 、把二叉树打印成多行
59.题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 1 2 34 5 6 7输出1 3 2 4 5 6 7输入1 -- 2 3左右 --- 7 6 5 4 右左输出1 -- 3 2 --- 4 5 6 7 栈结构...原创 2018-08-10 13:11:26 · 105 阅读 · 0 评论 -
剑指offer 45、46:扑克牌顺子 、孩子们的游戏(圆圈中最后剩下的数)
45.题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为...原创 2018-08-06 14:59:23 · 208 阅读 · 0 评论 -
剑指offer 31、32:整数中1出现的次数、把数组排成最小的数
31:题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思路: 设定整数点(如1、10、100等等)作为位置点i(对应...原创 2018-08-02 11:03:09 · 110 阅读 · 0 评论 -
剑指offer 33、34:丑数、第一个只出现一次的字符
33.题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路:丑数是由2,3,5任意乘得到的,质因数只能是2,3,5.所以构建数组,存储最小组合数 data[0]=1 1*2,1*3,1*5 选最小的 2,然后2对应指向data[1] dat...原创 2018-08-02 11:47:23 · 147 阅读 · 0 评论 -
剑指offer 47、48:求1+2+3+...+n 、不用加减乘除做加法
47.题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路:通过逻辑运算,达到控制操作的效果。class Solution {public: int Sum_Solution(int n) { int sum=0; n && (...原创 2018-08-07 13:36:39 · 149 阅读 · 0 评论 -
剑指offer 61、62:序列化二叉树 、二叉搜索树的第k个结点
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化:以某种顺序遍历二叉树,NULL的位置用特殊字符代替 1 2 34 5 6 7前序 序列化:1,2,4,#,#,5,#,#,3,#,#,6,#,#,7,#,#,使用逗号的原因,分割字符,例如节点值为11的话。字符串是 ...原创 2018-08-12 15:42:43 · 138 阅读 · 0 评论 -
剑指offer 63、64:数据流中的中位数 、滑动窗口的最大值
63.题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路:堆插入时间复杂度O(log n) 设置最大堆 最小堆。其中最大堆的最大值<=最小堆...原创 2018-08-15 15:01:42 · 210 阅读 · 0 评论 -
剑指offer 63、64:数据流中的中位数 、滑动窗口的最大值
63.题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路:堆插入时间复杂度O(log n) 设置最大堆 最小堆。其中最大堆的最大值<=最小堆...原创 2018-08-15 15:01:43 · 299 阅读 · 0 评论 -
剑指offer 49、50:把字符串转换成整数 、数组中重复的数字
49:题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 ...原创 2018-08-08 11:02:21 · 157 阅读 · 0 评论 -
剑指offer 51、52:构建乘积数组 、正则表达式匹配
51.题目描述 给定一个数组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]。不能使用除法。 思路: 1 2 3 4 5data1 data21 1*2*3*4*5*11*1 2*3*4*5...原创 2018-08-08 15:37:29 · 155 阅读 · 0 评论 -
剑指offer 35、36:数组中的逆序对 、两个链表的第一个公共结点
35.题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5...原创 2018-08-04 15:42:52 · 159 阅读 · 0 评论 -
剑指offer 29、30:最小的K个数 、连续子数组的最大和
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。class Solution {public: vector&amp;lt;int&amp;gt; GetLeastNumbers_Solution(vector&amp;lt;int&amp;gt; input, int k) { if(input.empty() || ...原创 2018-07-10 10:49:15 · 168 阅读 · 0 评论 -
C++ 笔记——输入 cin cin.get() cin.getline(),gets(),getline()
1.cin:从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。 char a; string b; string c; cin >> a; cin >&...原创 2018-05-24 16:43:33 · 969 阅读 · 0 评论 -
网易程序题
[编程题] 牛牛找工作 时间限制:2秒 空间限制:65536K 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。 输入描述: 每个输入包含一个测试用例。 每...原创 2018-06-20 17:58:48 · 732 阅读 · 0 评论 -
排序算法
1.冒泡排序法 如图所示:相邻两位相互比较。 时间复杂度: 最好情况,本身是有序的,O(n)。 最坏情况,本身是逆序的,O(n^2)。 平均情况:O(n^2) void bubble(vector<int> &data){ if (data.size() == 0) return; int len = data.size()...原创 2018-06-13 17:44:32 · 150 阅读 · 0 评论 -
贪心算法
引:https://blog.csdn.net/yanerhao/article/details/70162902 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择,贪心策略使用的前提是局部最优能导致全局最优。必须注意的是,贪心算法不是对所有问题都...原创 2018-06-21 16:28:19 · 123 阅读 · 0 评论 -
剑指offer 6:旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路:看起来挺好做的,但是复杂度为O(n);这题给出了排序数组,明显要用到这个条件。二分查找法复杂度为O(...原创 2018-06-22 10:23:52 · 126 阅读 · 0 评论 -
剑指offer 7:斐波那契数列
算法知识视频讲解 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n&amp;lt;=39 思路:斐波那契可以用递归做,但是容易出现栈溢出,可以把递归改成尾递归的形式;可以用循环做。//递归class Solution {public: int Fibonacci(int n) { if(n==0 || n==...原创 2018-06-22 10:39:17 · 141 阅读 · 0 评论 -
C++笔记之——顺序容器
标准库类型string表示可变的字符序列,使用string类型必须首先包含string头文件。string的定义在命名空间std中。1.初始化string a1; 默认初始化,a1是个空字符串;string a2 = &amp;quot;hello&amp;quot;;拷贝初始化,a2是字面值hello的一个副本string a3(a2);拷贝初始化,a3是字面值a2的一个副本string a4=a3;拷贝初始...原创 2018-05-31 17:31:54 · 175 阅读 · 0 评论 -
剑指offer 8、9、10:跳台阶、变态跳台阶、矩形覆盖
八:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路:1 12 11 23 111 12 214 1111 22 112 121 211 5 11111 122 212 221 1112 1121 1211 21111 12 23 34 55 8class Solution...原创 2018-06-22 12:16:52 · 117 阅读 · 0 评论 -
剑指offer 11:二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:1.逐位进行&amp;amp;amp;判断;2.n&amp;amp;amp;(n-1)相当于把最右边的1变为0。10011 &amp;amp;amp; 10010 = 1001010010 &amp;amp;amp; 10001 = 1000010000 &amp;amp;amp; 01111 = 00000class Sol原创 2018-06-22 15:28:52 · 163 阅读 · 0 评论 -
剑指offer 12、13:数值的整数次方、调整数组顺序使奇数位于偶数前面
第十二题题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路:类似于第九题,快速幂运算。这一题要分析exponent为负数的情况,且base为0的情况。 复杂度:O(n)class Solution {public: double Power(double base, int exponent) { ...原创 2018-06-22 16:28:31 · 163 阅读 · 0 评论 -
剑指offer 14、15:链表中倒数第k个结点 、反转链表
十四题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路: 1.反转链表,然后求第k个节点 2.利用空间换时间,把链表每个结点都存在vector中 3.链表倒数第k个,就是正数第l-k+1个;利用两个指针,第一个先走k-1个节点,然后第二个开始一起走,这样第二个节点就走了l-k+1个。思路2:时间复杂度:O(n)/*struct ListNode { int va...原创 2018-06-22 17:07:30 · 154 阅读 · 0 评论 -
剑指offer 16:合并两个排序的链表
十六题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路:设置两个指针分别指向这两个递增链表。存储对应小的数,并对应的指针自加。当其中一个链表为空时,则把新链表指向另一个链表。/*struct ListNode { int val; struct ListNode *next; ListNode(int ...原创 2018-06-22 17:47:15 · 157 阅读 · 0 评论 -
剑指offer 17、18:树的子结构 、二叉树的镜像
十七题 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路:十八题 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 ...原创 2018-06-22 17:57:49 · 230 阅读 · 0 评论 -
剑指offer 19、20、21:顺时针打印矩阵、包含min函数的栈 、栈的压入、弹出序列
第十九题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路:每一次循环是外侧一圈,那么设置两个标记,每次循环后相当于一个新的矩阵,再次循环。然后分析特殊情况,即只有一行,或...原创 2018-06-26 10:29:12 · 189 阅读 · 0 评论 -
剑指offer 22、23、24: 从上往下打印二叉树、二叉搜索树的后序遍历序列、二叉树中和为某一值的路径
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路:层序,用队列,先进先出。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), rig...原创 2018-06-26 15:06:31 · 133 阅读 · 0 评论 -
剑指offer 25、26:复杂链表的复制、二叉搜索树与双向链表
25题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路:1 2 3 4 NULL 第一步:在原节点后复制新的节点 1 1 2 2 3 3 4 4 NULL 第二步:复制random对应关系 第三步:分离原链表...原创 2018-06-27 10:22:53 · 95 阅读 · 0 评论 -
剑指offer 27、28:字符串的排列、数组中出现次数超过一半的数字
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 思路: abc a bc b ac ...原创 2018-07-10 10:44:23 · 150 阅读 · 0 评论 -
剑指offer 65、66:矩阵中的路径 、机器人的运动范围
65.题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串”bcced”的路径,但是矩阵中不包含”abcb”路径,...原创 2018-08-16 11:08:29 · 189 阅读 · 0 评论