
零基础俯冲剑指offer
钧桐
怕什么真理无穷?进一寸有进一寸的欢喜!
展开
-
[剑指offer]JT67---剪绳子(巧算或者动态规划!都挺好!)
剑指offer第六十七题题目如下思路与代码巧算动态规划题目如下思路与代码巧算其实我们不难发现,好像数都可以换成2和3的乘积。由数学知识,乘积项大于1的情况下,一般是乘积项数越多积越大的!而且3的乘积是要优先于2的比如 8, 2222 < 33*2class Solution {public: int cutRope(int number) { int x=number%3; int y=number/3; if(x==原创 2021-04-21 10:57:50 · 116 阅读 · 0 评论 -
[剑指offer]JT66---机器人的运动范围(遍历即可!)
剑指offer第六十六题题目如下思路与代码题目如下思路与代码遍历每个点,算出这点符不符合要求就好了。中间会有些剪枝操作,看代码就懂了!然后为了过程更加清晰,我们把数字分割和相加写成了函数!class Solution {public: vector<int> splitnum(int n){ vector<int> ans; if(n<10){ ans.push_back(n); }原创 2021-04-21 10:00:46 · 121 阅读 · 0 评论 -
[剑指offer]JT65---矩阵中的路径(算是剑指offer里唯一的非二叉树非链表dfs题吧,也比较经典!)
剑指offer第六十五题题目如下思路与代码题目如下思路与代码思路很简单,就是每个点都深搜一下。中间比较巧妙的就是,没有用到map数组要存放是否访问,而是将之前的点置空然后回溯如果再次到这里为空就return false了看代码就很容易懂得!不懂咱们评论区见啦!!!class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix cha原创 2021-04-21 09:30:04 · 114 阅读 · 0 评论 -
[剑指offer]JT64---滑动窗口的最大值(deque双向队列滑动窗口!)
剑指offer第六十四题题目如下思路与代码题目如下思路与代码对于数组,假设我们当前遍历到下标i,对于下标i+1的元素(假设i和i+1都在同一个窗口),如果比arr[i]大,说明了什么?如果arr[i+1] 已经大于了 arr[i], 那么还要arr[i]有什么用.就有点“既生瑜何生亮”的感觉。如果arr[i+1] < arr[i]呢?显然arr[i]还是需要保留的。为什么呢?因为又可以arr[i] 对于下一个arr[i+1]所在的窗口来说,arr[i]已经失效了。假设这里有那么一个容器原创 2021-04-20 19:21:41 · 132 阅读 · 0 评论 -
[剑指offer]JT63---数据流中的中位数(和ccf大中小一个意思!)
剑指offer第六十三题题目如下代码与思路题目如下代码与思路规定了要两个方法,那么我们要先搞一个vector吧insert的时候找一下插入的位置或者就在后面随意push,找中位数的时候sort()一下就可以了我觉得吧,这个题,呵呵,懂得都懂!!!然后知识补充!static_cast是一个c++运算符,功能是把一个表达式转换为某种类型,但没有运行时类型检查来保证转换的安全性。class Solution {public: vector<int> v; void原创 2021-04-16 18:15:07 · 113 阅读 · 0 评论 -
[剑指offer]JT62---二叉搜索树的第k个结点(二叉树有个江湖规矩!)
剑指offer第六十二题题目如下思路与代码题目如下思路与代码二叉树江湖规矩:左结点<根结点<右结点那就很简单了,深搜,走左节点,n++,没了再右节点。注意n++是先左节点递归再n++,所以第一个n++是最左节点。上代码了!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x),原创 2021-04-16 17:11:05 · 89 阅读 · 0 评论 -
Leetcode2020-9月刷题汇总---如何搬起脚边的砖块?
如何搬起脚边的砖块?LeetcodeLeetcodeLeetcode-队列-20.有效的括号(简单)Leetcode-贪心-56.合并区间(中等)Leetcode-优先队列-1046.最后一块石头的重量(简单)Leetcode-贪心-122.买卖股票的最佳时机 II(简单)Leetcode-树-100.相同的树(简单)Leetcode-树-101.对称二叉树(简单)Leetcode-树-102.二叉树的层序遍历(中等)Leetcode-图-997.找到小镇的法官(简单)Leetcode-原创 2020-09-28 15:44:33 · 207 阅读 · 0 评论 -
如何才能拾起脚边的砖块? Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和题目如下解题思路1.暴力是男人的浪漫,二层大循环,直接淦c++代码+运行超时2.温柔dp,动态规划才最美丽C++代码+通过题目如下解题思路1.暴力是男人的浪漫,二层大循环,直接淦c++代码+运行超时class Solution {public: int max=0; int maxSubArray(vector<int>& nums) { if(nums.size()==0) return 0;原创 2020-09-28 15:25:46 · 107 阅读 · 0 评论 -
如何才能拾起脚边的砖块? Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点题目如下解题思路c++代码题目如下解题思路1.vector存下链表,然后用小标输出c++代码在这里插入代码片原创 2020-09-27 22:39:36 · 121 阅读 · 0 评论 -
如何才能拾起脚边的砖块? Offer 29. 顺时针打印矩阵
剑指 Offer 29. 顺时针打印矩阵题目如下解题思路c++代码题目如下解题思路和ccf的z字输出很像,就是四边嘛,给个值,一直缩小,然后输出c++代码class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if (matrix.empty()) return {}; vector<int> re原创 2020-09-25 22:14:11 · 107 阅读 · 0 评论 -
如何才能拾起脚边的砖块? Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列题目如下解题思路直接上代码题目如下解题思路题目已经告诉我们思路了,用两个stack堆栈来实现添加和删除直接上代码class CQueue {public: stack<int> stack1; stack<int> stack2; CQueue() {} void appendTail(int value) { stack1.push(value); } int d原创 2020-09-24 21:48:40 · 105 阅读 · 0 评论 -
如何才能拾起脚边的砖块? Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n题目如下解题思路c++代码题目如下解题思路由于不能用乘积(公式),和for while等,所以我们使用递归。c++代码class Solution {public: long long ans=0; int sumNums(int n) { if(n==0) return ans; ans+=n; return sumNums(n-1); }};...原创 2020-09-23 17:39:45 · 103 阅读 · 0 评论 -
[剑指offer]JT61---序列化二叉树(strcpy函数接口是 char类型,不能直接string哦!)
剑指offer第六十一题题目如下思路与代码仙人指路之几个函数题目如下思路与代码对于,序列化,肯定是递归啊,根节点值转换,然后左右节点,然后拼接,还是比较肤浅的思路吧!对于,反序列化,肯定也是递归,这里要注意的就是,字符转数字,可能是几个字符转一个数字。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v原创 2021-04-12 10:53:27 · 121 阅读 · 0 评论 -
[剑指offer]JT60---把二叉树打印成多行(这个肯定和59题是兄弟题,换了个说法而已!)
剑指offer第六十题题目如下解题思路与代码题目如下解题思路与代码和五十九题一个意思,用队列,入队,第一队空了,重新赋值新的qsize,然后上一段进去res,vector.clear(),一直持续到qsize为0为止(循环内判断qsize为0,要重新赋值,重新赋值还是为0才结束!)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :原创 2021-04-07 10:04:27 · 92 阅读 · 0 评论 -
[剑指offer]JT59---按之字形顺序打印二叉树(队列和堆栈都可以哦!)
剑指offer第五十九题题目如下思路与代码队列堆栈也是可以的(两个堆栈来回用,前面有个题不是堆栈实现队列嘛?)题目如下思路与代码队列这种一看就广搜,用队列错不了,结束标志就是l=0,重新赋值l=q.size()就是新入队的(也就是马上要变成下一层vector的值)然后如果是偶数次就翻转一下,用到了reverse函数,挺方便的/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *righ原创 2021-04-06 21:25:27 · 98 阅读 · 0 评论 -
[剑指offer]JT58---对称的二叉树(和第十八题异曲同工呀!)
剑指offer第五十八题题目如下解题思路与代码题目如下解题思路与代码镜像两个字都透露出一种递归的感觉…就是比较左右子树是否相同就好了注意递归出口是isSame(r1->left,r2->right)&&isSame(r1->right,r2->left);左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树。/*struct TreeNode { int val; struct TreeNode *left; st原创 2021-04-01 17:25:25 · 96 阅读 · 0 评论 -
[剑指offer]JT57---二叉树的下一个结点(我准备了菜鸟解法和大神解法,大家都能吃饱!)
剑指offer第五十七题题目如下解题思路与代码暴力解法(笔试可用,面试请勿拿来装逼)最优解法(在面试的时候请一定装起来!)不是装逼,是装进脑子...题目如下解题思路与代码暴力解法(笔试可用,面试请勿拿来装逼)直接模拟根据给出的结点求出整棵树的根节点根据根节点递归求出树的中序遍历,存入vector在vector中查找当前结点,则当前结点的下一结点即为所求虽然有点暴力,但是时间复杂度也是线性的,第一步:最坏为O(N),N为整棵树结点的个数。第二步:O(N)第三步:最坏为O(N)就是原创 2021-04-01 17:06:40 · 106 阅读 · 0 评论 -
[剑指offer]JT56---删除链表中重复的结点(戴上新表头,更加方便!)
剑指offer第五十六题题目如下解题思路与代码题目如下解题思路与代码思路其实挺简单得,只是大家对代码,链表有抵触情绪,别问我怎么知道得,我就是这样。但是静下来,就是照着它说得做就好了。三个指标pre(用来之后删除结点用得)cur和next(比较两个值得)然后一直滑动就好了,遇到了相等得情况,就只动next了,找到第一个不相等的值之后再就是删除链表了最后如果存在next再下一位!注意,其中else{pHead=next;}这一步是为了应付出现 1 1 1 1 1 2这种情况,直接原创 2021-04-01 10:23:11 · 143 阅读 · 0 评论 -
[剑指offer]JT55---链表中环的入口结点(所有的偶遇都是蓄谋已久!详细图解哦!)
剑指offer第五十五题题目如下思路与代码题目如下思路与代码1.双指针找到相遇点,慢指针走一步,快指针走两步,它们肯定会相遇的,因为相对速度是一步,不会错过,哎,快指针真的是个舔狗…2.看图说话a:链表头到环入口的长度b:环入口到相遇点的长度c:相遇点到环入口的长度相遇时:快指针路程=a+(b+c)*k+b,k>=1,其中b+c为环的长度,k为绕环的圈数慢指针路程=a+b快指针走的路程是慢指针的两倍,所以:(a+b)*2=a+(b+c)*k+b化简可以得到 a=(k-1原创 2021-03-30 10:22:45 · 173 阅读 · 0 评论 -
[剑指offer]JT54---字符流中第一个不重复的字符(感觉前面做过,就是hash表呀,难道我肤浅了?)
剑指offer第五十四题题目如下思路与代码题目如下思路与代码不就是字符串存进去,并map存下来然后找就for循环查出来等于1,就只出现一次了呀!在我这里属于傻逼题了…我晕,我都装起来了0.Tclass Solution{public: string str; map<char,int> m; //Insert one char from stringstream void Insert(char ch) { str.push_bac原创 2021-03-29 11:26:26 · 93 阅读 · 0 评论 -
[剑指offer]JT53---表示数值的字符串(别小瞧这题,陷阱真滴多!)
剑指offer第五十三题题目如下解题思路与代码题目如下解题思路与代码就是看字符串表示的是不是个数值,那直接滋就可以了优先级搞清楚1.符号只能有一个或者两个,有两个的话,它前一个字符必须是e或者E2.e和E只能有一个3.小数点也只能有一个,还必须在e和E的前面4.其他的要在0-9之间,表示的是一个数字把四点用if else写出来就可以了class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可原创 2021-03-29 11:17:22 · 129 阅读 · 0 评论 -
[剑指offer]JT52---正则表达式(我真的震惊,竟然要用动态规划!)
剑指offer第五十二题我们先来看看题目怎么说思路与代码我们先来看看题目怎么说思路与代码思路就是动态规划。这个详解还要过几天再更,这题还挺难的,其实先上代码和注释class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @param pattern string字符串 * @return原创 2021-03-27 11:15:20 · 115 阅读 · 0 评论 -
[剑指offer]JT51---构建乘积数组(不能使用除法!)
剑指offer第五十一题题目如下思路与代码题目如下思路与代码简单的思路就是找出所有数字的乘积,然后除以A[I]的值就得到了B[I]的值!但是,我们是不能用除法的!那我们来看看,代码的做法![1 2 3 4 5]第一次给B赋值[1 1 2 6 24]===>[1 A[0] A[0]*A[1] A[0]A[1]A[2] A[0]A[1]A[2]A[3] ];第二次在第一次的基础上改变B的赋值[1120 160 220 65 241]—>[A[0,1,2,3] A[0 2 3原创 2021-03-23 15:15:50 · 181 阅读 · 0 评论 -
[剑指offer]JT50---数组中重复的数字(没你想得那么简单)
剑指offer第五十题题目如下思路与代码直接map查询稍微提升一点,vector不用map那样每次查询巧解(用到了0到n-1的范围)以例题为例,分析巧解过程题目如下思路与代码直接map查询这种思路在前面已经用过很多次了…都无语了,这题显然没有用到0到n-1这个条件class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int原创 2021-03-23 11:29:03 · 165 阅读 · 0 评论 -
[剑指offer]JT49---把字符串转换成整数(要求不使用库函数!)
剑指offer第四十九题题目如下思路与代码题目如下思路与代码思路就是很简单啊先判断有没有符号位,但是符号位第二出现肯定就是错的!然后读数字字符串加到数字后面就可以了剑指offer没你想的那么难!!!class Solution {public: int StrToInt(string str) { if(str.length()==0) return false; int flag=0; long res=0; for原创 2021-03-23 10:36:12 · 123 阅读 · 0 评论 -
[剑指offer]JT48---不用加减乘除做加法(快进来研究凡学吧!)
剑指offer第四十八题题目如下思路与代码题目如下这可太装了…思路与代码首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方式计算二进制值相加:5-101,7-111第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。原创 2021-03-22 11:07:27 · 119 阅读 · 0 评论 -
[剑指offer]JT47---1+2+3+...n(不准用乘除,for,while,if,switch等哟!)
剑指offer第四十七题题目如下思路与代码题目如下思路与代码那就递归呗!找到递归式子,n+f(n-1)找好出口,到1return 1;over,比较华丽的前n项和把!class Solution {public: int Sum_Solution(int n) { if(n==1) return 1; return n+Sum_Solution(n-1); }};...原创 2021-03-22 10:44:46 · 105 阅读 · 0 评论 -
[剑指offer]JT46---孩子们的游戏(约瑟夫环问题详解!)
剑指offer第四十六题题目如下思路与代码模拟数学公式法题目如下思路与代码模拟这就是个约瑟夫环问题,换了个问法而已!用队列模拟,直到剩一个人为止就行要注意,没有小朋友的情况可以提前判断一下!class Solution {public: int LastRemaining_Solution(int n, int m) { queue<int> q; int cnt=0; int res=-1; /* 不要掉原创 2021-03-22 10:36:39 · 134 阅读 · 0 评论 -
[剑指offer]JT45---扑克牌顺子(是不是顺子看首尾差的长度就得了!)
剑指offer第四十五题题目如下思路与代码题目如下思路与代码先找出最大和最小的数字,它们的差如果大于牌的长度就成不了,因为万能牌也补不上如果等于长度,那刚好如果小于长度,那有万能牌,随意补就好了!class Solution {public: bool IsContinuous( vector<int> numbers ) { int record[14]={0},maxn=-1,minn=14; for(auto a:numbers){原创 2021-03-21 21:27:58 · 99 阅读 · 0 评论 -
[剑指offer]JT44---翻转单词顺序列(横看成岭侧成峰!)
剑指offer第四十四题题目如下思路与代码题目如下思路与代码把单词先分割出来,用vector数组存起来,然后倒叙输出就可以了思路很简单这里值得注意的是,string也是可以调用push_back方法在后面添加元素的!class Solution {public: string ReverseSentence(string str) { vector<string> solution; string ret=""; strin原创 2021-03-21 21:01:25 · 167 阅读 · 0 评论 -
[剑指offer]JT43---左旋转字符串(所有失去的都以另一种方式回归!)
剑指offer第四十三题题目如下思路与代码题目如下思路与代码循环左移,感觉突然回到了学微机原理的时候。哎,挺怀恋的!直接干就完事了,思路太多了!两个队列,或者vector删增操作也行!这里直接用c++的substr来完成吧!直接找到位置一刀切,真爽!class Solution {public: string LeftRotateString(string str, int n) { int size=str.length(); if(size==原创 2021-03-21 20:42:46 · 119 阅读 · 0 评论 -
[剑指offer]JT42---和为S的两个数字(两次哈希表,出场次序很重要)
剑指offer第四十二题题目如下思路与代码如下题目如下思路与代码如下每个值都查找sum-array[I]存不存在,存在说明找到了,那我们看看乘积要不要更新然后存入map由于题目说了要输出两个数的乘积最小,所以不能找到了就马上break;要跑完!unordered_map比map要快很多呢!!!#include<unordered_map>class Solution {public: vector<int> FindNumbersWithSum(vecto原创 2021-03-20 14:32:05 · 108 阅读 · 0 评论 -
[剑指offer]JT41---和为S的连续正数序列(我称之为尺取法,进退之间张弛有度。)
剑指offer第四十一题题目如下思路与代码题目如下思路与代码就是穷举了,但是这个暴力可以有简化的一段成功了就砍头,不会成功了也砍头懂了吧,砍头很生动,很容易理解吧!class Solution {public: vector<vector<int> > FindContinuousSequence(int sum) { vector<vector<int>> res; vector<int>原创 2021-03-20 11:59:33 · 122 阅读 · 0 评论 -
[剑指offer]JT40---数组中只出现一次的两个数字(哈希或者排序查找!)
剑指offer第四十题题目如下思路与代码哈希表(没啥好说的)先排序再查找题目如下思路与代码哈希表(没啥好说的)遇到了就map++,然后查表只有一次就存进去,但是最后要排个序class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */原创 2021-03-20 11:36:58 · 126 阅读 · 0 评论 -
[剑指offer]JT39---平衡二叉树(自上而下还是自下而上呢?)
剑指offer第三十九题题目如下思路与代码自上而下自下而上题目如下思路与代码自上而下就是从根节点找左右树的最大深度,然后比较。接着再找子树的左右树,这个听着就挺浪费资源的吧我们看看代码实现,多说无益,一看便知。class Solution {public: int tree_depth(TreeNode *root){ if(!root) return 0; if((!(root->left))&&(!(root->rig原创 2021-03-19 09:18:25 · 158 阅读 · 0 评论 -
[剑指offer]JT38---二叉树的深度(同学们,这题我好像讲过呢!)
剑指offer第三十八题题目如下思路与代码题目如下思路与代码遇到树和链表,递归跑不了。每次深度最多加1,送分题同学们,会做的继续打瞌睡吧!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int dep原创 2021-03-19 08:36:38 · 99 阅读 · 0 评论 -
[剑指offer]JT37---数字在升序数组中出现的次数(二分向两端走到尽头!)
剑指offer第三十七题题目如下思路与代码题目如下思路与代码1.最简单的,map存值,for循环,map值++,然后直接查map就得到了结果,或者循环等于输入的k就res++但是这种方法太low了2.本题正解,题目说是升序数组,那二分应该就是本题的最佳回答了注意找到后,还要前后找class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int res=0; in原创 2021-03-19 08:18:45 · 107 阅读 · 0 评论 -
[剑指offer]JT36---两个链表的第一个公共结点(与数组找相同值何异?)
剑指offer第三十六题题目如下思路与代码题目如下思路与代码我看到了往上有一种计算两个链表长度的做法,没看懂,我直接map存一个,另一个来查,我肤浅了。。。直接冲把!/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindFirstCommonNode( Li原创 2021-03-17 17:20:38 · 94 阅读 · 0 评论 -
[剑指offer]JT35---数组中的逆序对(归并排序很勇嘛!)
剑指offer第三十五题题目如下思路与代码题目如下思路与代码其实就是归并排序的一个变形,中间加了个判断。即,//如果前面的元素小于后面的不能构成逆序对//如果前面的元素大于后面的,那么在前面元素之后的元素都能和后面的元素构成逆序对class Solution {public: void merge_sort(vector<int> &first,vector<int> &second,int left,int right,int &re原创 2021-03-17 09:50:12 · 115 阅读 · 0 评论 -
[剑指offer]JT34---第一个只出现一次的字符(之前没有,之后也是)
剑指offer第三十四题题目如下思路与代码题目如下思路与代码思路1:这种和次数有关的,大家应该会想到map讷,存入,然后一个个查找就可以了把思路2:但是对于字符串他有find函数可以用,也就是说,我们在整个字符串中只找到一次的话就是答案了,显示很简单,直接上代码class Solution {public: int FirstNotRepeatingChar(string str) { int len=str.length(); if(!len) ret原创 2021-03-17 08:52:36 · 114 阅读 · 0 评论