摘要:
题目如下: 解题思路:题目要求时间复杂度是O(log n),而且数组也是有序的,那么可以考虑采用二分查找法。那么解题的关键就是找出转折点,找到了转折点后,把数组拆分成两段,再分别用二分查找,即可得到答案。 代码如下: 阅读全文
摘要:
题目如下: 解题思路:这个题目可以这么做,遍历数组,如果元素是0,则count --;否则count ++;这样的话,每遍历到一个下标i,count的值就是0>i区间内0和1的差值。如果我们能找到在0->i-1区间内差值也为count的最小下标j,那么j->i区间就是一个0和1数量相同的区间。遍历过 阅读全文
摘要:
题目如下: 解题思路:这个题目可以进行拆分成几个子问题。第一,求出island的数量,其实就是 200. Number of Islands,这个很简单,DFS或者BFS都能搞定;第二,除了求出island的数量之外,还要求出每个island包括的1的数量,这个也不难,在DFS或者BFS的过程中计数 阅读全文
摘要:
题目如下: 解题思路:题目要求时间复杂度是O(logN),可以尝试使用二分查找法。首先数组是有序的,而且仅有一个元素出现一次,其余均为两次。我们可以先找到数组最中间的元素,记为mid。如果mid和mid-1以及mid+1都不相同,那么mid就是single number。如果mid和mid-1相同, 阅读全文
摘要:
题目如下: 解题思路:本题是 55. Jump Game 的升级版。同样是拒绝使用动态规划,因为会TEL。我的解题思路是每jump一次,求出能到达的位置的最大值,然后再在这个最大值的基础上继续求能到达的最大值,直到最大值大于或者等于数组长度为止。 代码如下: 阅读全文
摘要:
题目如下: 解题思路:本题和爬楼梯问题非常类似,我一开始尝试用动态规划,结果得到了TEL。再仔细分析题目,题目只要求判断是否能到达,这点非常关键。这样的话我们需要判断是否至少存在一个index,其能到达的最远距离大于数组长度即可。但是要注意一点,数组可能会存在中间脱节的情况,例如[1,2,0,0,4 阅读全文
摘要:
题目如下: 解题思路:对于这种数字类型的题目,数字一般都会有内在的规律。不管怎么操作了多少次,本题的数组一直是一个等差数列。从[1 2 3 4 5 6 7 8 9] -> [2 4 6 8] -> [2 6] -> [6]这个序列中,我们可以得到公差分别是1,2,4。如果我们把n扩大一点,打印出其中 阅读全文
摘要:
题目如下:这两个题目可以用同样的代码来解答,因此就合并在一起了。 题目一: 题目二: 解题思路:两个题目的唯一区别在于第二个题目下一行的最小值不一定会小于前一行的最大值。但是不管怎么样我们可以确定的是,如果某一行的最小值都比target要大,那么这一行之后的值都比target要大。如果target介 阅读全文
摘要:
题目如下: 解题思路:leetcode里面有很多这样类似的题目,本题是求能够整除的,还有求依次递增的,一增一减的等等,都是万变不离其宗。对于这一类题目,我都是采用动态规划的算法。这题怎么解呢?首先对nums按升序排序,然后创建一个dp数组,dp[i]表示从nums[0]~nums[i]区间符合题目条 阅读全文
摘要:
题目如下:解题思路:本题是 560. Subarray Sum Equals K 的升级版,可以参见560的解题思路。唯一的区别是560只给了一个精确的和K,而本题是给了一个和的范围,所以最终计数的时候遍历一下题目要求的区间即可。 代码如下: 阅读全文