合集-代码随想录
摘要:## 题目:[704. 二分查找](https://leetcode.cn/problems/binary-search/) ### 思路: 二分查找一般是在**有序的**数组中查找指定的值,单纯的查找值,把数组跑一遍的复杂度为O(n)。 二分查找每次把范围缩小一半,我们每次都去中间的值,有以下三种
阅读全文
摘要:## 题目:[977. 有序数组的平方](https://leetcode.cn/problems/squares-of-a-sorted-array/) ### 思路: 一开始的思路是从中间向两边扩: 1. 找到第一个大于等于0的位置r;判断nums[r]是否大于等于0,如果不是赋值为`len(n
阅读全文
摘要:## 题目:[454. 四数相加 II](https://leetcode.cn/problems/4sum-ii/) ### 思路: 首先,因为下标不同,因此相同的序列可能会出现很多次。 A + B + C + D = 0,那么当知道保存了A+B的和之后,就看有没有A + B = 0 - C -
阅读全文
摘要:## 题目:[242. 有效的字母异位词](https://leetcode.cn/problems/valid-anagram/) ### 思路: 很简单,就是看两个字符串每个字母出现的次数是不是相同的。 可以用两个数组来比较,也可以用一个数组比较。 ### 代码: 一个数组 ```go func
阅读全文
摘要:## 题目:[24. 两两交换链表中的节点](https://leetcode.cn/problems/swap-nodes-in-pairs/) ### 思路:  首先给他加一个虚拟头结
阅读全文
摘要:## 题目:[203. 移除链表节点](https://leetcode.cn/problems/remove-linked-list-elements/) ### 思路:  ### 思路: 本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。 - 二叉树节点的深
阅读全文
摘要:## 题目:[102. 二叉树的层序遍历](https://leetcode.cn/problems/binary-tree-level-order-traversal/) ### 思路: 先把根放进去,然后每次都是左右就可以了。 记录一个深度,当`len(res) == deepth`的时候就说明
阅读全文
摘要:今天的题目就是二叉树的前中后序遍历,目前只写了递归方法,之后再补迭代方法。 ## 题目:[144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-preorder-traversal/) ### 思路: 前序遍历:根-左-右 ### 代码1:
阅读全文
摘要:## 题目:[239. 滑动窗口最大值](https://leetcode.cn/problems/sliding-window-maximum/) ### 思路:  ### 思路: 很简单的一个栈的题目: 1. 如果是左括号就存 2. 如果是右括号就和栈顶的匹配 1. 匹配失败就返回false 2. 匹配成功就删除栈顶元素 3.
阅读全文
摘要:## 题目:[232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/) ### 思路: 因为go没有栈和队列的类型,直接自己写就行了。 比较简单的实现,具体看代码中的注释。 ### 代码: ```go type
阅读全文
摘要:## 题目:[28. 找出字符串中第一个匹配项的下标](https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/) ### 思路: 说白了就是匹配字符串,朴素就是暴力以每一个位置为起点都跑一遍。
阅读全文
摘要:## 题目:[344. 反转字符串](https://leetcode.cn/problems/reverse-string/) ### 思路: 每次把最前面和最后面的交换位置即可 `strings`库里没有反转的方法 ——这个反转是之后几个题的一个基础 ### 代码: 双指针调换位置 ```go
阅读全文
摘要:## 题目:[860. 柠檬水找零](https://leetcode.cn/problems/lemonade-change/) ### 思路: 收到钱三种情况: 1. 5刀:直接收起来就可以了,不需要找钱 2. 10刀:收到10刀,需要找5刀,如果没有5刀,就返回false,否则5刀-1 3.
阅读全文
摘要:## 题目:[1005.K次取反后最大化的数组和](https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/) ### 思路: 思路是: 1. 先把负数从小到大变成正数(即绝对值由大到小) 2. 如果还需要变化(k>0
阅读全文
摘要:## 题目:[122. 买卖股票的最佳时机 II](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/) ### 思路: 假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。 相当于
阅读全文
摘要:## 题目:[455. 分发饼干](https://leetcode.cn/problems/assign-cookies/ "455. 分发饼干") ### 思路: 贪心,思路是尽量先给胃口值小的分,饼干也是从小的开始分: 1. 如果饼干满足了胃口值,结果+1换下一个人,下一个饼干 2. 如果饼干
阅读全文
摘要:## 题目:[332. 重新安排行程](https://leetcode.cn/problems/reconstruct-itinerary/) ### 思路: 其实这里已经是图的部分了,回溯应该也可以。Hierholzer算法解决欧拉问题 ### 代码: ```go func findItiner
阅读全文
摘要:## 题目:[491. 递增子序列](https://leetcode.cn/problems/non-decreasing-subsequences/ "491. 递增子序列") ### 思路: 核心问题——同层去重,这一题不能够重新排序因此不可以用`i > index && nums[i] ==
阅读全文
摘要:## 题目:[93. 复原 IP 地址](https://leetcode.cn/problems/restore-ip-addresses/ "93. 复原 IP 地址") ### 思路: 1. 函数参数:参数就一个stirng,path先收集ip地址的四个部分,最后存入res中时拼接成一个str
阅读全文
摘要:## 题目:[39. 组合总和](https://leetcode.cn/problems/combination-sum/description/ "39. 组合总和") ### 思路: 一样的递归套路: 1. 函数参数:因为要求和,所以有一个当前和的参数;另外因为**要保证没有重复的结果**,所
阅读全文
摘要:## 题目:[216. 组合总和 III](https://leetcode.cn/problems/combination-sum-iii/) ### 思路: 多加一个记录和的参数,还有一个起始位置的参数(不重复就得加) 结束条件是个数到了k: 1. 如果此时sum == n那就说明答案正确 2.
阅读全文
摘要:## 题目:[77. 组合](https://leetcode.cn/problems/combinations/) ### 思路: 回溯就是dfs的一个特殊情况也就是递归的一种情况,值得注意的一点: 要记得深拷贝,不然最后全是空 ### 代码: ```go var res [][]int var
阅读全文
摘要:## 题目:[669. 修剪二叉搜索树](https://leetcode.cn/problems/trim-a-binary-search-tree/) ### 思路: 遍历到的值小于最小值,说明左子树里的所有节点都小于最小值,舍弃左子树。 遍历到的值大于最大值,说明右子树里的所有节点都大于最大值
阅读全文
摘要:## 题目:[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/) ### 思路: BST和普通二叉树不同的一点是可以根据特性来找最近公共祖先,只要找到第一个值
阅读全文
摘要:## 题目:[530. 二叉搜索树的最小绝对差](https://leetcode.cn/problems/minimum-absolute-difference-in-bst/) ### 思路: 一个关键问题——BST的中序遍历是由小到大的顺序,也就是说记录遍历的前一个节点,每次比较当前节点-前一
阅读全文
摘要:## 题目:[654. 最大二叉树](https://leetcode.cn/problems/maximum-binary-tree/) ### 思路: 和前中序构造树差不多的方法,以前是返回值,现在是返回树 ### 代码: ```go /** * Definition for a binary
阅读全文
摘要:## 题目:[513. 找树左下角的值](https://leetcode.cn/problems/find-bottom-left-tree-value/) ### 思路: 层序遍历是最好的选择了,先放右节点,再放左节点最后一个元素就是最左侧的节点。 说白了层序遍历就是广度优先搜索BFS。 ###
阅读全文
摘要:## 题目:[110. 平衡二叉树](https://leetcode.cn/problems/balanced-binary-tree/) ### 思路:  只要get到一个点,比如:30 50 70 80 60 70 40 这
阅读全文
摘要:题目:503. 下一个更大元素 II 思路: 总之就是走两次nums,可以拼接,也可以用下面的取余方式。 代码: func nextGreaterElements(nums []int) []int { lens := len(nums) res := make([]int, lens) for i
阅读全文
摘要:题目:739. 每日温度 思路: 要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了 维护一个 栈顶->栈底 由小到大的栈;这样在之后(右侧)遇到更大的数时,就可以得到所有在他前面并且比他小的数,就能获得结果。 初始化默认为0; 代码: func dail
阅读全文
摘要:题目:647. 回文子串 思路: 整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。 当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。 当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况 情况一:下标i 与 j相同,同一个字符例如a,当然
阅读全文
摘要:题目:583. 两个字符串的删除操作 思路: 还是最长公共子序列,假设最长公共子序列长度是l;那么需要删除的次数是len(s1) - l + len(s2) - l 代码: func minDistance(word1 string, word2 string) int { lens1 := len
阅读全文
摘要:题目:392. 判断子序列 思路: 最长子序列的长度是不是len(s) 代码: func isSubsequence(s string, t string) bool { dp := make([][]int,len(s)+1) for i:=0;i<len(dp);i++{ dp[i] = mak
阅读全文
摘要:题目:1143. 最长公共子序列 思路: 主要就是两大情况: text1[i - 1] 与 text2[j - 1]相同,text1[i - 1] 与 text2[j - 1]不相同 如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = d
阅读全文
摘要:题目:300. 最长递增子序列 思路: dp[i]状态 取决于 dp[0] - dp[i-1]中小于dp[i]的元素中最大的值+1,即: for j:=0; j <i; j++ { if nums[i] > nums[j]{ dp[i] = max(dp[i], dp[j] + 1) } } 代码:
阅读全文
摘要:题目:309. 买卖股票的最佳时机含冷冻期 思路: 具体可以区分出如下四个状态: 状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有) 不持有股票状态,这里就有两种卖出股票状态 状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态
阅读全文
摘要:题目:123. 买卖股票的最佳时机 III 思路: 达到dp[i][1]状态,有两个具体操作: 操作一:第i天买入股票了,那么dp[i][1] = dp[i-1][0] - prices[i] 操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1] 那么
阅读全文
摘要:题目:121. 买卖股票的最佳时机 思路: 贪心做起来更简单;dp多此一举……状态0是持有,状态1是不持有 代码: func maxProfit(prices []int) int { lens := len(prices) if lens == 0 { return 0 } dp := make(
阅读全文
摘要:题目:198. 打家劫舍 思路: 决定dp[i]的因素就是第i房间偷还是不偷。 如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。 如果不偷第
阅读全文
摘要:题目:139. 单词拆分 思路: 单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。 拆分时可以重复使用字典中的单词,说明就是一个完全背包! 动规五部曲分析如下: 确定dp数组以及下标的含义:dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个
阅读全文
摘要:## 题目:[70. 爬楼梯](https://leetcode.cn/problems/climbing-stairs/description/) ### 思路: 除了`dp[i] = dp[i-1] + dp[i-2]`还可以用完全背包的方法,可以放无数个1或者2,看有多少种排列(先背包后物品)
阅读全文
摘要: ## 题目:[518. 零钱兑换 II](https://leetcode.cn/problems/coin-c
阅读全文
摘要:## 题目:[1049. 最后一块石头的重量 II](https://leetcode.cn/problems/last-stone-weight-ii/) ### 思路: 和昨天的类似,越靠近和的一半剩下的就越少。 ` 相对于 01背包,本题中,石头的重量是 stones[i],石头的价值也是 s
阅读全文
摘要:## 题目:[416. 分割等和子集](https://leetcode.cn/problems/partition-equal-subset-sum/) ### 思路: 只有确定了如下四点,才能把01背包问题套到本题上来。 - 背包的体积为sum / 2 - 背包要放入的商品(集合里的元素)重量为
阅读全文
摘要:## 题目:[343. 整数拆分](https://leetcode.cn/problems/integer-break/ "343. 整数拆分") ### 思路: 状态转移方程:`dp[i] = max(dp[i], max((i-j)*j,dp[i-j]*j))`,其中`(i-j)*j`是把i分
阅读全文
摘要:## 题目:[62. 不同路径](https://leetcode.cn/problems/unique-paths/) ### 思路: **首先想到的是数论方法组合数其实就是向右和向下的步数是固定的,就找一个组合的个数就可以了。** 状态转移方程:一个位置的路径数就是,上面位置和左面位置路径数的和
阅读全文
摘要:## 题目:[509. 斐波那契数](https://leetcode.cn/problems/fibonacci-number/) ### 思路: 动规五部曲: 这里我们要用一个一维dp数组来保存递归的结果 1. **确定dp数组以及下标的含义** dp[i]的定义为:第i个数的斐波那契数值是dp
阅读全文
摘要:## 题目:[738. 单调递增的数字](https://leetcode.cn/problems/monotone-increasing-digits/) ### 思路: 从前往后找的话,如果改了一个数,那么对这个数之前的判断就不一定会成立了(eg.110) 从后往前找的话,会不断更新前面的数,后
阅读全文
摘要:## 题目:[435. 无重叠区间](https://leetcode.cn/problems/non-overlapping-intervals/) ### 思路: 移除最少就是保留最多,和昨天最后一个题一样就是选出最多的不重叠区间。 记住一点——右边界越小,后续可以选取的范围就越大,可能选取到的
阅读全文

浙公网安备 33010602011771号