![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
Leo8213
不能再当菜鸡.....
展开
-
leetcode 1043 Partition Array for Maximum Sum 详解
leetcode 1043 Partition Array for Maximum Sum 详解这是个典型的DP问题,所以先分拆成小的子问题。如:arr = [1,15, 7, 9, 2, 5, 10], k = 3设f(i)f(i)f(i)存储的是当前数组arr[0,..,i−1]arr[0,..,i-1]arr[0,..,i−1]的解f(0)=0f(0)=0f(0)=0 (1)原创 2020-10-07 14:57:48 · 171 阅读 · 0 评论 -
leetcode 338 Counting Bits 详细解答
leetcode 338 Counting Bits 详细解答以例子说明:Index : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17bin nums : 0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 1原创 2020-10-07 11:59:39 · 108 阅读 · 0 评论 -
leetcode 59 Spiral Matrix II 详细解释
leetcode 59 Spiral Matrix II 详细解释题目理解: 给出一个正整数n, 以螺旋式的顺序将1 ~ n2填充到方阵中。题目比较好理解,比较容易想到的方式就是直接根据坐标填充。解法1如果 n = 3, 则坐标的填充顺序就应该是(0, 0),(0, 1),(0, 2),(1, 2),(2, 2),(2, 1),(2, 0),(1, 0),(1, 1)所以现在难点就变成了怎么将下标按照上述方式进行移动。在这儿,通过观察,可以设定移动方向(0,1)表示向右移动 &nbs原创 2020-10-06 23:14:36 · 107 阅读 · 0 评论 -
leetcode 1550 Three Consecutive Odds 详细解答
leetcode 1550 Three Consecutive Odds 详细解答题目理解:找出数组 arr 中是否存在三个连续的奇数题目比较简单,循环遍历一边,判断是否有3个连续的数字是奇数即可:原创 2020-10-06 21:21:16 · 130 阅读 · 0 评论 -
详解 leetcode 1277
详解 leetcode 1277题目如下:题目解释:给出一个只包含0,1的矩阵,计算出其中只包含1的子方阵有多少个?在给出的例子中: 边长为1的子方阵有10个; 边长为2的子方阵有4个; 边长为3的子方阵有1个;所以最后的答案时10 + 4 + 1 = 15个解题思路:这里可以自底向上思考:如果只有一个元素的方阵,即 [1],可以直接计算出答案为1如果有4个元素的方阵,比如:原创 2020-10-06 18:29:15 · 278 阅读 · 1 评论 -
1314. Matrix Block Sum 详细解答
1314. Matrix Block Sum 详细解答解法1: Brute Force题目理解:求出距离某个元素为K的所有元素的累加和。比如:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]元素4,若 k=1。距离元素4为1的元素包括1, 2, 5, 7, 8, 最后得到的累加和为 1+2+4+5+7+8 = 27.所以答案中在元素4的位置变为了27暴力求解的方式很简单,在遍历到每一个元素时,直接求出距离为k的所有元素累加和即可。代码如下:问题:复原创 2020-10-01 16:20:34 · 294 阅读 · 0 评论 -
leetcode 1389. Create Target Array in the Given Order 详细解答
leetcode 1389. Create Target Array in the Given Order 详细解答代码如下:因为是python, 可以直接用insert函数,也可以用切片原创 2020-06-24 10:09:28 · 147 阅读 · 0 评论 -
leetcode 697. Degree of an Array 详细解答
leetcode 697. Degree of an Array 详细解答比较简单,有很多不同的思路,我这里的思路是将数值和下标存成一个字典(hashmap),key是值,val是含有对应下标的列表。在存储的为字典的同时,将数字出现的频数的最大值也可以取出来。具体代码如下:...原创 2020-06-22 10:38:22 · 102 阅读 · 0 评论 -
leetcode 53 Maximum Subarray 详细解答
leetcode 53 Maximum Subarray 详细解答解法1动态规划:举例说明:[−2,2,−1,4,−1,2,1,−5,4][-2, 2, -1, 4, -1, 2, 1, -5, 4][−2,2,−1,4,−1,2,1,−5,4](1):第一个组合[−2]到以第一个数字结尾的最大连续子数组,则最大值−2(2):第二个组合[−2,2]到以第二个数字结尾的最大连续子数组,当前最大值2(3):第三个组合[−2,2,−1]到以第三个数字结尾的最大连续子数组,当前最大值为2+(−1)=1(原创 2020-06-22 10:11:56 · 162 阅读 · 0 评论 -
leetcode 22 Generate Parentheses 详细解答
leetcode 22 Generate Parentheses 详细解答回溯法,代码如下:在这里,拿 n = 2来举例f(2,2,"")f(2,2,"")f(2,2,"") |—f(1,2,"(")f(1, 2,"(")f(1,2,"(") |—f(0,2,"((")f(0, 2,"((")f(0,2,"((") |——f(0,1,"(()")f(0, 1,"(()")f(0,1,"(()") |——f(0,0,"原创 2020-06-20 11:24:58 · 101 阅读 · 0 评论 -
leetcode 20 Valid Parentheses 详细解答
leetcode 20 Valid Parentheses 详细解答在这里借助栈来实现括号的匹配,如果遇到了栈顶元素和要进入栈的元素是匹配的,则弹出栈。本来想做一个gif演示整个过程的,但不知道怎么做,有知道的大佬可以告知一下,谢谢了具体代码如下:...原创 2020-06-19 10:57:27 · 166 阅读 · 0 评论 -
leetcode 377 Combination Sum IV 详细解答
leetcode 377 Combination Sum IV 详细解答上来无脑用回溯,像 leetcode 77 。代码如下:结果超时。所以只能换个思路。举例说明:nums=[1,2,3]target=4nums = [1, 2, 3] \\target = 4nums=[1,2,3]target=41→[1]1 → [1]1→[1]2→[1,1],[2]2 → [1, 1], [2]2→[1,1],[2]3→[1,1,1],[1,2],[2,1],[3]3 → [1, 1, 1]原创 2020-06-18 14:29:43 · 147 阅读 · 0 评论 -
leetcode 216 Combination Sum III 详细解答
leetcode 216 Combination Sum III 详细解答在做这个题之前,务必先做一下 leetcode 77,主要的思想都是回溯。当然一定要找好出口。具体代码如下:原创 2020-06-18 11:02:30 · 120 阅读 · 0 评论 -
leetcode 40 Combination Sum II 详细解答
leetcode 40 Combination Sum II 详细解答建议在做这个题之前看一下 leetcode 39 。方法基本一模一样。具体代码如下原创 2020-06-17 17:11:44 · 123 阅读 · 0 评论 -
leetcode 39 Combination Sum 详细解答
leetcode 39 Combination Sum 详细解答在做这个题之前,建议先做一下 leetcode 77解法1回溯法代码如下:这段代码里,执行非常慢,最后发现是因为会出现很多重复的 path。在这里可以跟踪下标,是的不会出现重复的。代码如下:...原创 2020-06-17 15:52:02 · 99 阅读 · 0 评论 -
leetcode 77 Combinations 详细解答
leetcode 77 Combinations 详细解答解法1参考 leetcode 491 ,代码如下占用空间过大,执行很慢,不推荐解法2递归。过程如下:代码如下。解法3因为是python,可以调包。原创 2020-06-17 13:19:51 · 246 阅读 · 0 评论 -
leetcode 1014 Best Sightseeing Pair 详细解答
leetcode 1014 Best Sightseeing Pair 详细解答在这里我们可以将问题转化为 (A[i]+i)+(A[j]−j)(A[i] + i) + (A[j]-j) (A[i]+i)+(A[j]−j)那么理所当然,我们想要 A[i] + i 越大越好,所以用一个index来保存当前A[i]+i 的下标。具体代码如下:...原创 2020-06-17 11:03:51 · 108 阅读 · 0 评论 -
leetcode 940 Distinct Subsequences II 详细解答
leetcode 940 Distinct Subsequences II 详细解答这个题一看到的时候,想到了 leetcode 491。思路完全没问题,但是要将所有的元组放入到集合,会出现空间不足的问题。下面是样例代码。所以换个思路动态规划:举例: “abc”F(0) = ( " " )F(1) = ( " ", “a” )F(2) = ( " ", “a”, “b”,“ab” )F(3) = ( " ", “a”, “b”,“ab”, “c”, “ac”,“bc”,“abc” )原创 2020-06-17 00:15:10 · 92 阅读 · 0 评论 -
leetcode 646 Maximum Length of Pair Chain 详细解答
leetcode 646 Maximum Length of Pair Chain 详细解答解法1通过观察,我们想找到一个最长的序列,满足题目的条件,由此容易想到用动态规划(最长子序列问题一般都可以用动态规划)。状态转移方程:F(i)={max(F(j)+1)j∈(0,i)andpairs(j,1)<pairs(i,0)1others F(i)=\begin{cases}max(F(j)+1) & j ∈ (0, i) &and& pairs(j, 1) <原创 2020-06-16 23:04:52 · 139 阅读 · 0 评论 -
leetcode 491 Increasing Subsequences 详细解答
leetcode 491 Increasing Subsequences 详细解答这个题很巧妙。来看一下这个构建的过程:整个过程,每一个进入集合的数字,都要基于之前的元组中的最后一个元素。所以在这个时候就要保存之前所有递增的元组和单元素元组(可以用list,但是集合中不支持list)。根据题目要求,选出长度大于等于2的元组。代码如下:...原创 2020-06-16 18:29:18 · 162 阅读 · 0 评论 -
leetcode 993 Cousins in Binary Tree 详细解答
leetcode 993 Cousins in Binary Tree 详细解答解法1根据题意,互为cousin节点,必须是深度一样,父节点不一样,所以我们可以新定义一个函数,用于找出x, y的深度和父节点即可。具体代码如下:解法2BFS方法来解答,就是将节点,父节点,和节点深度都存储到队列中。代码如下:...原创 2020-06-16 17:15:08 · 162 阅读 · 0 评论 -
leetcode 429 N-ary Tree Level Order Traversal 详细解答
leetcode 429 N-ary Tree Level Order Traversal 详细解答解法1层序遍历二叉树一样解答原创 2020-06-16 16:44:49 · 72 阅读 · 0 评论 -
leetcode 102 Binary Tree Level Order Traversal 详细解答
leetcode 102 Binary Tree Level Order Traversal 详细解答以层序遍历为基础:代码如下:原创 2020-06-16 16:29:07 · 80 阅读 · 0 评论 -
leetcode 111 Minimum Depth of Binary Tree 详细解答
leetcode 111 Minimum Depth of Binary Tree 详细解答解法1在这里用BFS,类似层序遍历。队列存储的是节点和层数。出口就是当一个节点既没有左子树也没有右子树。代码如下:原创 2020-06-16 11:51:08 · 90 阅读 · 0 评论 -
leetcode 107 Binary Tree Level Order Traversal II 详细解答
leetcode 107 Binary Tree Level Order Traversal II 详细解答这个题就是层序遍历然后倒序输出,参考 leetcode 102代码如下:原创 2020-06-16 11:42:00 · 76 阅读 · 0 评论 -
leetcode 103 Binary Tree Zigzag Level Order Traversal 详细解答
leetcode 103 Binary Tree Zigzag Level Order Traversal 详细解答此处也是求层序遍历,参考 leetcode 102,只是需要将层数给记录下来。也比较简单。代码如下:flag 记录的则是层数原创 2020-06-16 11:39:34 · 104 阅读 · 0 评论 -
leetcode 102 Binary Tree Level Order Traversal 详细解答
leetcode 102 Binary Tree Level Order Traversal 详细解答此处求层序遍历,比较简单。代码如下:原创 2020-06-16 11:36:13 · 86 阅读 · 0 评论 -
leetcode 1162 As Far from Land as Possible 详细解答
leetcode 1162 As Far from Land as Possible 详细解答在这里用BFS:代码如下:原创 2020-06-16 11:03:37 · 150 阅读 · 0 评论 -
leetcode 994 Rotting Oranges 详细解答
leetcode 994 Rotting Oranges 详细解答解法1这个题很明显可以用BFS来做,比较简单,我就不细讲了。代码如下:原创 2020-06-16 10:59:47 · 84 阅读 · 0 评论 -
leetcode 542 01 Matrix 详细解答
leetcode 542 01 Matrix 详细解答解答1这个题是找出1到最近的 0 的距离。所以应该是从某一个单元格的上下左右来分析。看1的上下左右离 0 最近的距离是多少?所以很快就能想到BFS。这里就是先将matrix中数值为0的下标存储在队列和一个集合中。每一次取出队列头的下标(i, j),将(i,j)四个方向的下标对应的matrix加1这里说的可能不太详细,下面是我的插图加以解释:代码如下:解答2这里可以用动态规划想到一个比较巧妙的办法,因为要找出单元格的上下左右来比较最小原创 2020-06-16 10:24:07 · 315 阅读 · 0 评论 -
leetcode 406 Queue Reconstruction by Height 详细解答
leetcode 406 Queue Reconstruction by Height 详细解答解答1这个题其实就是找规律的题,首先要找到 h大于等于自身的数,在这里就可以想到对身高进行逆序排序。而 k相当于所在数组的下标。代码如下:...原创 2020-06-15 18:23:18 · 116 阅读 · 0 评论 -
leetcode 33 Search in Rotated Sorted Array 详细解答
leetcode 33 Search in Rotated Sorted Array 详细解答因为题目要求时间复杂度要是O(log n),所以这里很明显要用二分法。但应该怎么构造二分?流程如下:具体代码如下:原创 2020-06-13 12:20:36 · 107 阅读 · 0 评论 -
leetcode 454 4Sum II 详细解答
leetcode 454 4Sum II 详细解答这个题比较简单,先将两个数组所有元素相加的结果存入到字典,比如:A = [1, 2],B = [-2, -1]存入到字典的键为两数相加的结果的相反数,值为两数相加结果的相反数的个数。则 dict = {1: 1, 0: 2, -1: 1}。再看另外两个数组的元素相加结果是否存在字典中,因为 c+d = - (a+b)。如果存在,则加上对应数的个数。详细请看代码时间复杂度:O(N2),空间复杂度:O(N)在优化一下,代码如下:...原创 2020-06-13 10:52:23 · 130 阅读 · 0 评论 -
leetcode 18 4Sum 详细解答
leetcode 18 4Sum 详细解答代码如下:原创 2020-06-13 10:17:53 · 109 阅读 · 0 评论 -
leetcode 16 3Sum Closest 详细解答
leetcode 16 3Sum Closest 详细解答解法1Brute Force时间复杂度:O(N3), 空间复杂度:O(1)测试了一下,可以过解法2用3指针法, 参考 leetcode 15具体代码如下:时间复杂度:O(N2),空间复杂度:O(1)原创 2020-06-12 21:31:14 · 117 阅读 · 0 评论 -
leetcode 15 3Sum 详细解答
leetcode 15 3Sum 详细解答解法1Brute Force使用三重循环来找三个数代码如下:时间复杂度:O(N3),空间复杂度O(K)复杂度太高,不能通过。解法2很明显,需要降低时间复杂度,根据之前做 leetcode 167 的经验。先将数组排序后,再可以使用三个指针。代码如下:时间复杂度O(N2),空间复杂度O(K)...原创 2020-06-12 14:31:56 · 193 阅读 · 0 评论 -
leetcode 167 Two Sum II - Input array is sorted 详细解答
leetcode 167 Two Sum II - Input array is sorted 详细解答在这做个题之前,建议先看看 leetcode 1。做一下对比。这里不同的是,输入的数组是排序好了的。但都可以用 leetcode 1的方法来做。解法1Brute Force直接用双重for循环暴力破解代码如下:时间复杂度:O(N2),空间复杂度:O(1)这种解法在这里就会超时解法2跟 leetcode 1一样,借用字典来求解代码如下:时间复杂度:O(N),空间复杂度:O(转载 2020-06-12 10:58:38 · 128 阅读 · 0 评论 -
leetcode 1 Two Sum 详细解答
leetcode 1 Two Sum 详细解答解法1暴力解法,在这里使用双重for循环,遍历每一个数,来看两个数相加之和是否等于target。代码如下:时间复杂度:O(N2),空间复杂度:O(1)解法2上述解法时间复杂度过高,所以这里可以想到使用字典查询,使得查询变成O(1),因为要返回的是下标,所以字典存储的就是数字和对应的下标。代码如下:时间复杂度:O(N), 空间复杂度:O(N)...原创 2020-06-12 10:32:20 · 186 阅读 · 0 评论 -
leetcode 583 Delete Operation for Two Strings 详细解答
leetcode 583 Delete Operation for Two Strings 详细解答这个题跟 leetcode 712 类似,都是需要找出共同的子序列,然后相减。详细解释可参考 leetcode 712代码如下原创 2020-06-09 22:57:53 · 72 阅读 · 0 评论 -
leetcode 712 Minimum ASCII Delete Sum for Two Strings 详细解答
leetcode 712 Minimum ASCII Delete Sum for Two Strings 详细解答解法1这个题牵涉到两个数组的一些比较关系,会想到用动态规划求解。至于怎么求解,这里说的是删到的字母ASCII码之和,这里换个思路可以求两个字符串所有字母的ASCII码之和减去两个字符串相同子序列出现的字母的ASCII码值之和。所以状态转移方程就是求两个字符串相同序列的和。F( i+1, j+1 ) 表示字符串 s1[0 … i] 和 s2[0 … j]相同子序列ASCII的和。原创 2020-06-09 22:25:09 · 161 阅读 · 0 评论