会员
周边
新闻
博问
闪存
赞助商
YouClaw
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
熊妮妮
报错乃人生常事 不是在写bug就是在debug
博客园
首页
新随笔
联系
管理
订阅
07 2019 档案
剑指offer系列55:机器人的运动范围
摘要:这个题目的思路跟上一个很相似,还是回溯法。就是从第一个框开始判断是否大于限定值,然后判断它的上下左右。这个题可以明显看出来判断出来的应该是左上方区域,所以从0作为起点也很适合。 回溯法似乎很喜欢用递归,做题的时候注意边界值的处理。 这道题是剑指offer 的最后一个题了。我写的这个系列博客也进入了尾
阅读全文
posted @
2019-07-31 11:01
妮妮熊
阅读(165)
评论(0)
推荐(0)
※剑指offer系列54:矩阵中的路径
摘要:这个题目用的是回溯法。 之前回溯法练得比较少,所以这个题还是需要重视。 回溯法是算法里学过的,就是从第一个可能得路径开始找,一直找到最后一个。 这个题目要注意一下几点: 1.从第一个开始找,如果第一个元素等于要寻找的字符串的第一个元素,就继续去寻找该元素的上下左右,看是否等于其下一个。一直匹配到最后
阅读全文
posted @
2019-07-30 10:27
妮妮熊
阅读(169)
评论(0)
推荐(0)
剑指offer系列53:滑动窗口的最大值
摘要:分两步: 首先找到窗口内的内容,然后找到窗口内的最大值。 上面的解法是我自己想的,看了剑指offer,这个题是在栈与队列这一节放的,也就是考点是栈与队列。用上面的方法做时间复杂度是O(nk),但是用队列的方法做复杂度可以到O(n),也就是说每次滑动窗口可以在O(1)里找到最大值。 很大提高了效率,那
阅读全文
posted @
2019-07-29 20:37
妮妮熊
阅读(90)
评论(0)
推荐(0)
剑指offer系列52:数据流中的中位数
摘要:注意几点: 1.要是排序后的中位数,所以要对输入的数字排序 2.注意输出的类型是double
阅读全文
posted @
2019-07-29 20:13
妮妮熊
阅读(96)
评论(0)
推荐(0)
※剑指offer系列51:二叉搜索树的第k个结点
摘要:根据二叉搜索树的特点,它中序遍历的顺序就是从小到大的顺序。因此只要中序遍历找到第k个就可以。 1 class Solution { 2 public: 3 TreeNode* KthNode(TreeNode* pRoot, int k) 4 { 5 if (pRoot == NULL||k==0)
阅读全文
posted @
2019-07-29 19:50
妮妮熊
阅读(91)
评论(0)
推荐(0)
※剑指offer系列50:序列化二叉树
摘要:先来说一下什么是序列化二叉树,就是把二叉树转换成一串序列。反序列化就是将一串序列构造成一个二叉树。 这个题我也不是很懂,为什么要这样写 1 class Solution { 2 public: 3 vector<int> aux; 4 void treetovec(TreeNode * root)
阅读全文
posted @
2019-07-29 18:45
妮妮熊
阅读(114)
评论(0)
推荐(0)
剑指offer系列49:把二叉树打印成多行
摘要:有了上一个之字形打印二叉树,这个题就比较简单了。 首先分析这道题的结构,一行一行的输出。 1.如果第一行顺序存储,也就是先存左边在存右边。那么输出的时候也要同样的先左边后右边的顺序。这就是先进先出,所以用队列。 2.如果不顺序存,使用栈来存。第二行就先右边在左边,必须这样第一行输出的时候才可以先左后
阅读全文
posted @
2019-07-27 11:35
妮妮熊
阅读(117)
评论(0)
推荐(0)
剑指offer系列48:按之字形顺序打印二叉树
摘要:做这个题,选对数据结构很重要。 之字形打印,说明单双数行的输出顺序不一致,因此需要用两个栈。一行的数据放在其中一个栈中,如果栈空了说明此行全部输出,因此换下一个栈。 1 class Solution { 2 public: 3 vector<vector<int> > Print(TreeNode*
阅读全文
posted @
2019-07-27 10:43
妮妮熊
阅读(186)
评论(0)
推荐(0)
剑指offer系列47:对称的二叉树
摘要:这个题的主要思路是: 用二叉树的左子树的右子树和右子树的左子树比较,再用左子树的左子树和右子树的右子树比较。(好像有点绕,但其实就是对称的思想) 剑指offer的说法是用树的前序遍历的两个方法,前序遍历应该是:根-》左-》右。但是我们用另一种前序遍历:根-》右-》左。如果这两个序列一样就判断它是对称
阅读全文
posted @
2019-07-27 08:41
妮妮熊
阅读(113)
评论(0)
推荐(0)
剑指offer系列46:二叉树的下一个结点
摘要:寻找中序遍历中的给定结点的下一个结点,可以分为以下几种情况。 1.该节点有右子树,其右子树没有左结点,那么下一个一定就是右子树 2.该节点有右子树,其右子树有左结点,那么下一个一定就是右子树的左结点 3.没有右子树,有父节点,该节点是父节点的左子树,那么下一个就是它的父节点 4.没有右子树,有父节点
阅读全文
posted @
2019-07-26 16:07
妮妮熊
阅读(123)
评论(0)
推荐(0)
※剑指offer系列45:删除链表中重复的结点
摘要:思路: 1.用两个指针,第一个存之前的结点,第二种存当前结点。 2.每次判断当前结点与当前结点的下一个结点的值是否相同,如果相同就去调用函数寻找下一个与当前结点的值不同的几点,然后将前一个结点与找到的下一个结点连接起来。 如果不同则寻找一个:将当前结点的值付给前结点,当前结点移动到下一个结点。 注意
阅读全文
posted @
2019-07-26 11:03
妮妮熊
阅读(116)
评论(0)
推荐(0)
※剑指offer系列44:链表中环的入口结点
摘要:这个题要找到链表中的环的入口,很自然的可以分为两个问题。首先是判断链表中是否有环,其次寻找到环的入口。 1.判断是否有环,这里有两个指针。一个一次走一步,一个一次走两步。用这两个指针在链表上走,如果存在环两个指针一定会相遇,并且相遇的点是在环内。 这个很重要,判断链表是否存在环。 2.寻找环的入口。
阅读全文
posted @
2019-07-26 09:02
妮妮熊
阅读(128)
评论(0)
推荐(0)
剑指offer系列43:字符流中第一个不重复的字符
摘要:前面有一道题跟这个很类似,第35题。有了那个的经验这个就很好做了。区别是这个需要做的是一个字符流的只出现一次的字符,也就是字符串的情况是动态变化的。 有两个数据结构,一个是string类型的用来存储当前的字符流,还有一个用数组表示的哈希表来存储各个字符出现的次数。找第一个只出现一次的字符就是找哈希表
阅读全文
posted @
2019-07-25 14:38
妮妮熊
阅读(152)
评论(0)
推荐(0)
剑指offer系列42:表示数值的字符串
摘要:这个题难度并不大,主要考虑几个方面: 1.正负号位,只能出现一次,只能出现在数字的前面 2.小数点位,只能出现一次,必须出现在数字的终点 3.指数为e或E,可以出现在数字之前或者数字之后 4.称为数字的必要条件是必须包含数字(e和E算不算数组根据题目而定,此时假定不算) 有一个测试用例是“-.123
阅读全文
posted @
2019-07-25 09:48
妮妮熊
阅读(181)
评论(0)
推荐(0)
※剑指offer系列41:正则表达式匹配
摘要:做这个题目一定要思路清晰,各种情况都要考虑完善。 分为两种情况 1.其中有一个到结尾了 2.两个都没结尾,这里以它的下一位是否为*作为判断条件。
阅读全文
posted @
2019-07-24 17:40
妮妮熊
阅读(173)
评论(0)
推荐(0)
剑指offer系列40:构建乘积数组
摘要:这个题我开始没看懂,呜呜呜…… 解释一下题目,意思就是有一个数组A和一个数组B。B的每一项等于A[0]*A[1]……A[i-1]*a[i+1]……A[n-1]; 根据题目的意思,A也有n-1项,因此看B的计算表达式除了中间A[i-1]*a[i+1]这里少了一个A[i]没有相乘之外别的项都乘了。因此就
阅读全文
posted @
2019-07-24 15:31
妮妮熊
阅读(174)
评论(0)
推荐(0)
剑指offer系列39:把字符串转换成整数
摘要:主要代码其实很少,主要是对各种情况的判断。在做题的时候一定要考虑到各种情况的非法输入。 1.前面的空格需要跳过 2.判断数字的正负号并记录 3.如果有非法输入例如字母和其他非数字和正负号的字符,退出返回0 4.返回的是一个数字,所以一定要考虑数字的边界问题 5.对于各种情况考虑到之后最好再加一个无条
阅读全文
posted @
2019-07-24 11:43
妮妮熊
阅读(149)
评论(0)
推荐(0)
剑指offer系列38:不用加减乘除做加法
摘要:主要记住一点:对于数字的运算除了减加乘除之外就是位运算。位运算包括与或非异或。然后看如何将两个数相加转换成位运算。因为计算机是二进制,所以按照二进制的思路去想。分为两部分,分别是:对于不用进位的位的加法操作相当于异或:相同为0,不同为1;对于要进位的位,也就是两个1,可以看成是与之后左移一位。以上两
阅读全文
posted @
2019-07-23 11:20
妮妮熊
阅读(178)
评论(0)
推荐(0)
※剑指offer系列37:求1+2+3……+n
摘要:2019-07-23 11:44:01 从这个题开始,我有些题目标题前面会加一个※号,以表示此题目比较重要,要多复习其中的知识点。 这个题就1到n的加法,不能用乘数法、循环语句和条件语句。第一个方法就是把想要的计算放进构造函数,注意这里算累计和所以要一直更新值,因此一定要用静态成员函数。 第二种方法
阅读全文
posted @
2019-07-23 10:52
妮妮熊
阅读(234)
评论(0)
推荐(0)
剑指offer系列36:孩子们的游戏
摘要:书上说这是著名的约瑟夫环问题。这个要频繁删除操作,所以用list做就很容易想到了。list是单向的,所以当迭代器走到尾部的时候,再让它回到头部就可以形成环。 看到剑指offer上的第二种解法。将这个题目推到出一个递归的公式。这样关键是要想到递归,其次想到递归要会推导公式,数学好难,o(╥﹏╥)o不过
阅读全文
posted @
2019-07-19 14:48
妮妮熊
阅读(267)
评论(0)
推荐(0)
剑指offer系列35:扑克牌顺子
摘要:把大小王当做0.然后对整个序列排序。排序后计算大小王的数目和需要大小王填的坑的数目。如果大小王数目大于等于要填的坑的数目就返回真,否则返回假。
阅读全文
posted @
2019-07-19 10:19
妮妮熊
阅读(144)
评论(0)
推荐(0)
剑指offer系列34:翻转单词顺序
摘要:我看到这个题目的第一想法是,按照空格把字符串分开,然后把被分开的字符串压栈。再把栈里的内容弹出组成一个字符串就可以。但是答案直接先翻转整个字符串,然后按照空格为分割翻转单个单词。这个方案不需要额外的空间。 左旋转字符串:举例(abcdefg),n=3;分为两部分,abc和defg。然后分别对两部分旋
阅读全文
posted @
2019-07-18 18:48
妮妮熊
阅读(138)
评论(0)
推荐(0)
剑指offer系列33:和为S的两个数字VS何为S的连续正数
摘要:第一个题,我想到的思路是一个个找的方法。看书上是设置两个指针然后两个指针一起走。确实这种时间复杂度更低。本来我看到有多组输出乘积最小的我还写了一个专门判断哪一对乘积最小的代码。看到别人证明说找到的第一对就是最小的,所以就没放。我发现这种使用两个指针从两端走的题目真的很多,以后遇见题可以往这方面考虑。
阅读全文
posted @
2019-07-18 17:11
妮妮熊
阅读(148)
评论(0)
推荐(0)
剑指offer系列32:数组中只出现一次的数字
摘要:第一个方法,用map存vector里的数 第二种方法就是剑指offer上的,主要是要知道一点,一个数异或自己等于0。因此如果数组中只有一个出现以此的数字,将这个数组依次异或就可以得到。基于此,将数组按第一次异或后的结果分为两部分,这两部分分别含有一个出现一次的数字。对这两个数组在异或即可。这个方法不
阅读全文
posted @
2019-07-18 15:29
妮妮熊
阅读(140)
评论(0)
推荐(0)
剑指offer系列31:二叉树的深度
摘要:第一个小题目是求二叉树的深度的,前面做过很多二叉树的题,这个就比较简单了。 第二个小题在第一个题的基础上也不难,主要是对于递归的掌握。 对于树的题目,脑子里不要想太复杂的东西,按照以下步骤做就好: 1.写递归终结条件,一般是结点指针为空 2.把树想象成最简单只有3个结点的小树,想想该怎么计算 3.写
阅读全文
posted @
2019-07-14 16:40
妮妮熊
阅读(161)
评论(0)
推荐(0)
剑指offer系列30:数字在排序数组中出现的次数
摘要:这个题我的思路是从开始遍历数组,找到一样的数字+1,遍历完整个数组即可。我好想每次想到的都是普通的算法,o(╥﹏╥)o剑指offer上说既然是排序,自然就想到了用二分法做,我emmmmm……这个题用二分法做的话,如果发现中间这个k,还要去找它的前几个k和后几个k,就是说找到它的第一个k和最后一个k,
阅读全文
posted @
2019-07-13 17:52
妮妮熊
阅读(165)
评论(0)
推荐(0)
※剑指offer系列29:两个链表的第一个公共结点
摘要:这个题我拿到的第一个想法确实是遍历两个链表,先遍历第一个链表,在遍历内部再遍历第二个链表。这样两个for循环就可以计算出一样的结点了。剑指offer这一章讲的是算法的效率问题,所以我想这个题一定有更快捷的方法。但是我想不出什么快速的办法,o(╥﹏╥)o看了剑指offer上的解法,主要其实就一句话。两
阅读全文
posted @
2019-07-13 15:20
妮妮熊
阅读(120)
评论(0)
推荐(0)
剑指offer系列28:数组中的逆序对
摘要:这个题我拿到没什么好的思路,除了一个个求的方法之外想不出效率更高的方法。这个题看剑指offer的意思是按照归并排序的方法做的,顺便复习一下归并排序^_^。看到这个题只要能想到用归并排序的方法做就已经成功了一半了,其次就是一些细节问题。写代码,你又思路,又会将思路用代码写出来才可以。只有思路不会写代码
阅读全文
posted @
2019-07-12 21:12
妮妮熊
阅读(132)
评论(0)
推荐(0)
剑指offer系列27:第一个只出现一次的字符
摘要:这个题我一看到,就觉得map很适合,因为map最擅长做这种给字母计数,给单词计数之类的工作。我看到剑指offer上是用hash表做的,其实原理是一样的,但是由于C++中没有hash表的模板,所以我就用map做了。
阅读全文
posted @
2019-07-12 15:14
妮妮熊
阅读(122)
评论(0)
推荐(0)
剑指offer系列26:丑数
摘要:z剑指offer这一章都是这种题型,求优化解的,尽可能降低算法的复杂度。这个题不难,首先要想清楚什么是丑数,其次,想清楚如何生成丑数。还有,如何表达生成的丑数。这个题在表达丑数的构成上的代码很巧妙。
阅读全文
posted @
2019-07-11 16:31
妮妮熊
阅读(133)
评论(0)
推荐(0)
剑指offer系列25:把数组排成最小的数
摘要:这个数我拿到的第一个想法是吧数字变成字符串,然后用字符串比较。看了答案竟然用排序的函数做,排序的函数sort真的是万能的。还有在比较两个字符串的大小的时候,我的思路是一直从字符串里拿元素比较其大小,答案的做法是直接比较字符串,利用了string 的特性。还有一个问题就是注释里写的,这里又没有静态数据
阅读全文
posted @
2019-07-10 19:38
妮妮熊
阅读(184)
评论(0)
推荐(0)
剑指offer系列24:连续子数组的最大和
摘要:初次看到这个题的时候,我觉得很复杂,因为不知道所求的子数组的长度,而且里有负数增加了难度。看了答案之后发现竟然可以用这么简单的算法做出来,答案里说用的是贪心算法。 剑指offer上说这个题也可以用动态规划的思路去做,但是代码是一样的。动态规划和贪心算法都是很常考的算法。 接下来写一个时间复杂度低的算
阅读全文
posted @
2019-07-10 15:40
妮妮熊
阅读(191)
评论(0)
推荐(0)
剑指offer系列23:连续子数组的最大和
摘要:初次看到这个题的时候,我觉得很复杂,因为不知道所求的子数组的长度,而且里有负数增加了难度。看了答案之后发现竟然可以用这么简单的算法做出来,答案里说用的是贪心算法。 剑指offer上说这个题也可以用动态规划的思路去做,但是代码是一样的。动态规划和贪心算法都是很常考的算法。
阅读全文
posted @
2019-07-08 19:36
妮妮熊
阅读(107)
评论(0)
推荐(0)
剑指offer系列22:最小的K个数
摘要:我的第一个思路就是用快排的方法做,找到下标为k 的数字。其中的细节多注意,特别是在快排的函数调用的时候。 第二种方法:在答案里看到的,由于我自己也不是很理解,所以没怎么写注释
阅读全文
posted @
2019-07-02 08:58
妮妮熊
阅读(158)
评论(0)
推荐(0)
公告