本文包含如下题目:
30. Substring with Concatenation of All Words
76. Minimum Window Substring
209. Minimum Size Subarray Sum
239. Sliding Window Maximum
Partition算法剖析
partition算法从字面上就非常好理解,就是分割算法嘛!简单讲就是可以把数组按照一定的分成几个部分,其中最常见的就是快速排序中使用的partition算法,这是一个二分partition算法,将整个数组分解为小于某个数和大于某个数的两个部分,然后递归进行排序算法。
上述只是二分partition算法,我们还会使用三分partition算法,三分partition也有这非常重要的应用。往往我们更多的关注点是快速排序算法等各种算法,以及时间复杂度等这些东西,今天我们专门讨论一下partition分割算法的一些应用。
72.Edit Distance
解题思路
- 使用DP动态规划,dp[i][j]表示word1中的前i个字符与word2中的前j个字符的距离;
- dp[i][j]的可能取值如下:
- word1插入一个字符:dp[i][j-1] + 1;
- word1删掉一个字符:dp[i-1][j] + 1;
- 两字符串最后一位不相同,则替换word1的最后一个:dp[i-1][j-1] + 1;
- 如果相同,则不需要操作:dp[i][j];
- DP取上述情形的最小值。
70 Climbing Stairs
题目链接:70. Climbing Stairs
解题思路
- dp[i]表示从i位置到达末尾的方法个数;
- 只剩最后一步就只有一种选择,两步则有两个选择;
- dp[m] = dp[m+1] + dp[m+2];