笔记:leetcode 题目思路

剑指 Offer 48. 最长不含重复字符的子字符串 - 力扣(LeetCode) 主站3题
思路:
遍历字符串,pos 数组记录当前字符在s中的位置,left 记录当前不重复子串的起点-1,当前不重复子串为i - left。
如果pos数组中有当前字符,且它的位置在left右侧,说明当前的不重复子串出现了重复字符,则更新 left = pos[s[i]]。
(写下思路15min)

剑指 Offer 63. 股票的最大利润 - 力扣(LeetCode) 主站121题
思路:
遍历数组,用 min 记录下截至目前的最小值,v - min 就是今天卖出所能得到的最大利润。res 记录截至目前所能得到的最大利润。
(写下思路5min)

剑指 Offer 07. 重建二叉树 - 力扣(LeetCode) 主站105题
思路:
建立辅助函数build,传入前序和后序序列,以及两个序列的左右边界。
如果左边界>右边界,则返回null。
找到前序序列首元素在中序序列中的位置i。用前序序列首元素建立当前节点。
左子树函数参数:前序序列的左边界变为 pleft+1,右边界为 pleft+i-ileft。
右子树函数参数:前序序列的左边界变为 pleft+i-ileft+1,右边界为 pright。
返回curr。(i-ileft 为左子树元素个数)
(写下思路16min)

剑指 Offer 53 - II. 0~n-1中缺失的数字 - 力扣(LeetCode) 主站无
思路:
缺失数字左侧的所有数字都和自己的下标相等。
二分法处理,如果中间的元素和自己的下标相等,则缺失发生在右侧,否则缺失发生在左侧。(二分法的难点在于边界情况的处理)
(写下思路10min)

剑指 Offer 49. 丑数 - 力扣(LeetCode) 主站264题
思路:
定义数组res记录所有丑数,且放入1。
定义三个下标变量,指向res的首元素。
当res.length<n时,给三个下标对应在res中的元素分别 *2, *3, *5,得到m1, m2, m3,然后找出最小值push到res中。
对比m1, m2, m3 和 最小值,谁相等,则谁下标变量+1。
(写下思路14min)

剑指 Offer 65. 不用加减乘除做加法 - 力扣(LeetCode) 主站无
思路:
a & b 得到两数相加时每一位的进位,左移一位存入carry。
a ^ b 得到不包含进位的两数之和,存入a。
令b = carry,b===0时循环结束。
(写下思路10min)

剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣(LeetCode) 主站无
思路:
定义辅助函数recur,参数为后序序列postorder,左边界 i,右边界 j。
如果 i >= j,则节点数量 ≤ 1,返回true。
对二叉搜索树的后序遍历序列,根节点为右边界 j。数组左半部分小于postorder[j],右半部分大于postorder[j]。可以据此找到两部分的界限。
若左侧全都小于postorder[j],右侧全都大于postorder[j],即p===j。且左右子树递归成立,返回true。
(写下思路14min)

剑指 Offer 34. 二叉树中和为某一值的路径 主站113题
思路:
定义辅助函数helper,参数为root, targetSum, 当前数组out, 结果数组res。
如果根节点不存在,return。
将根节点的值放入out。
判断根节点的值和当前targetSum是否相等,且当前根节点是否为叶子节点,满足则将out放入res。
然后递归地用helper处理左右子树。
out.pop(),将当前节点弹出。
(写下思路15min)

剑指 Offer 57 - II. 和为s的连续正数序列 主站无
思路:
定义i, j 为正数序列的左右边界,初始值为1。定义sum用于记录滑动窗口的和。
显然左边界的最大值不会超过 target / 2,可以作为循环结束的标志。
当窗口的和小于 target 的时候,窗口的和需要增加,所以要扩大窗口,窗口的右边界向右移动。
当窗口的和大于 target 的时候,窗口的和需要减少,所以要缩小窗口,窗口的左边界向右移动。
当窗口的和恰好等于 target 的时候,我们需要记录此时的结果。
接下来需要找 i+1 开头的序列,所以窗口的左边界要向右移动。
(写下思路11min)
参考:什么是滑动窗口,以及如何用滑动窗口解这道题

剑指 Offer 47. 礼物的最大价值 主站无
思路:
动态规划,每个点的最大值是 f(i,j-1) 和 f(i−1,j) 中的较大值加上当前单元格礼物价值 grid(i,j),转移方程:f(i,j)=max[f(i,j−1), f(i−1,j)]+grid(i,j)。
(写下思路7min)

剑指 Offer 66. 构建乘积数组 主站无
思路:
题目要求不能用除法。定义数组res,第一次循环得到当前元素左侧所有元素的循环。第二次从右到左,将当前元素右侧所有元素的乘积,乘到res数组上。
(写下思路3min)

剑指 Offer 61. 扑克牌中的顺子 主站无
思路:
关键是顺子的判断条件:除joker外,牌组中的最大值减最小值小于5。且除了joker牌,不能有其他重复的牌。
定义set用于检查重复元素,min和max用于记录最小、最大值,遍历过程中跳过joker。最后返回 max - min < 5。
(写下思路7min)

剑指 Offer 44. 数字序列中某一位的数字 主站400题
思路:
规律是前9个数都是1位的,然后 10 到 99 总共 90 个数字都是两位的,100 到 999 这 900 个数都是三位的。
定义变量 len 记录当前循环区间的数字位数,start 记录当前循环区间的第一个数字,cnt 记录当前循环区间的数字个数,start和cnt每次循环*10。
当 n > len * cnt 时循环继续,每次更新n为n - len * cnt。
循环结束后,(n-1)/len 就是目标数字在该区间里的坐标,加上 start 就是得到了目标数字,然后(n-1)%len就是所要求的目标位。
(n-1的原因:当len=3,n为1 2 3时,区间坐标为0,n为4 5 6时,区间坐标为1... (n-1)/len 可以实现这个效果)
(写下思路60min)
参考:[LeetCode] 400. Nth Digit 第N位 - Grandyang

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 主站无
思路:定义i, j指向数组两边,当i<j时循环,将i右移到偶数位置,将j左移到奇数位置,交换i, j指向的数字。
(写下思路5min)

剑指 Offer 32 - II. 从上到下打印二叉树 II 主站无
思路:
如果根节点存在,将其压入队列queue。
定义tmp用来记录每一层的元素,当队列queue不为空时循环。
处理queue中每一个元素,取出一个,压入tmp,将当前元素的左右子树压入queue。最后将tmp中的元素都压入res。
(写下思路12min)

剑指 Offer 54. 二叉搜索树的第k大节点 主站无
思路:
题目可转化为求 “此树的中序遍历倒序的第 k 个节点”。
递归遍历时,若root不存在或k1==0,则返回。
对当前节点,k1--,若k1==0,则更新res。
(写下思路20min)

剑指 Offer 68 - II. 二叉树的最近公共祖先 主站236题
思路:
若当前节点不存在,返回 null。
若当前节点是p或q,返回当前节点。
递归调用当前函数,传入左右子树。
若返回值不为null,则子树中存在p或q。
若左右子树都不为null,返回root。否则返回不为空的节点,或null。
(写下思路11min)

剑指 Offer 32 - III. 从上到下打印二叉树 III 主站无
思路:
队列queue中保存了当前行的所有元素,从左至右。
定义tmp数组,记录当前行的打印。根据res.length决定元素加入tmp数组的方向。
(写下思路5min)

剑指 Offer 52. 两个链表的第一个公共节点 主站160题
思路:
若两个链表无交点,则两者把两个链表循环一遍,最后指向对方链表的末尾。
若有交点,则长链表遍历结束时,短链表指针和长链表指针会从两个链表的同一位置开始,然后相遇。
(写下思路9min)

剑指 Offer 64. 求1+2+…+n 主站无
思路:
用 && 代替 if。
如果n>0,执行&&之后的语句,然后返回n。
否则返回0。
(写下思路5min)

剑指 Offer 28. 对称的二叉树 主站101题
思路:
构造辅助函数,用来判断左右子树是否对称。
若左右子树都为null,返回true。
若左右子树有一个为null,或两者值不相等,返回false。
递归判断子树的子树。
(写下思路6min)

剑指 Offer 31. 栈的压入、弹出序列
思路:
新建一个栈stack,用于模拟栈的压入、弹出过程。
每次入栈后,循环判断 “栈顶元素 == 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。
若 stack 为空,则此弹出序列合法。
(写下思路3min)

704. 二分查找
思路:
最基础的二分查找,关键是边界条件的处理。
左指针指向最左侧有效数据,右指针指向最右侧有效数据的右侧一位。
(写下思路4min)

53. 最大子数组和
思路:
max_ending_here 表示以当前位置作为结束位置的子数组的最大和。
(写下思路4min)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容