上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 22 下一页
摘要: 76. Minimum Window Substring 典型Sliding Window的问题,维护一个区间,当区间满足要求则进行比较选择较小的字串,重新修改start位置。 思路虽然不难,但是如何判断当前区间是否包含所有t中的字符是一个难点(t中字符有重复)。可以通过一个hashtable,记录 阅读全文
posted @ 2018-09-07 12:06 約束の空 阅读(154) 评论(0) 推荐(0)
摘要: 325. Maximum Size Subarray Sum Equals k 类似sum的题都可以想一想可不可以把sum依次求出来,然后 [i+1,j] 的sum 直接用 sum[j]-sum[i]来求。 由于这道题有负数存在,没办法用sliding window来做,只能另辟蹊径。 用一个has 阅读全文
posted @ 2018-09-07 09:19 約束の空 阅读(193) 评论(0) 推荐(0)
摘要: 209. Minimum Size Subarray Sum 方法一:Sliding Window 滑动窗口问题,维护一个sum<s的窗口(类似单调栈),遇到sum>=s的情况,就处理并++start。时间复杂度O(n)。 方法二:二分 由于从0~i的sum是单调的,可以用二分找。n个元素,每个元素 阅读全文
posted @ 2018-09-07 08:46 約束の空 阅读(130) 评论(0) 推荐(0)
摘要: 基础backtracing题,先排序一下,每次传一个参数表示开始的下标。注意dfs的时候,是i,不是i+1,因为同样的元素可以使用很多次。 40. Combination Sum II 有重复元素的情况。和Permutation II处理方法类似,如果 i>start && candidates[i 阅读全文
posted @ 2018-09-07 03:47 約束の空 阅读(103) 评论(0) 推荐(0)
摘要: 一开始用bfs做,memory不够,估计用dfs可以做。既然可以dfs来做,而且不需要保存路径等信息,肯定可以用dp来做。 方法一:DP 时间复杂度O(n^2) 方法二:Greedy 久违的贪心问题,其实我们只关心最大能跳到的距离, 因此可以用贪心来做。 时间复杂度O(n) 45. Jump Gam 阅读全文
posted @ 2018-09-06 04:39 約束の空 阅读(101) 评论(0) 推荐(0)
摘要: 必须利用原数组进行操作,第一想到的就是利用元素的对应下标,把nums[i]-1下标的元素*-1来做。但是由于0存在,所以不行。 可以利用while循环,把当前位置符合要求的元素swap到正确的位置,最后只要遍历nums,如果 i 下标的数不为 i+1,说明 i+1就是答案。如果没有这样的数,那么答案 阅读全文
posted @ 2018-09-06 03:47 約束の空 阅读(95) 评论(0) 推荐(0)
摘要: 暴力会超时,利用二分优化。 阅读全文
posted @ 2018-09-05 23:14 約束の空 阅读(85) 评论(0) 推荐(0)
摘要: 这道题的本质是寻找 数组里比某个元素大的第一个元素。 可以用单调栈来做,维护一个单减的栈,遇到大的元素,出栈知道栈顶元素大于当前元素。该过程中出栈的元素的next greater element就是当前元素。 II 循环用 i%n 可以解决,但是这道题相比上一题有了重复的元素,所以stack里存下标 阅读全文
posted @ 2018-09-05 11:39 約束の空 阅读(105) 评论(0) 推荐(0)
摘要: 多了重复的元素,可以先通过排序,如果当前元素和之前元素相同,且之前的元素没有被visit过,说明前一个元素已经访问过并重新置为没访问过,所以这种情况需要continue。 也可以用之前I的第二种方法,交换,这样就不用排序了,但是为了防止重复的答案,所以需要set 注意 dfs(start+1) , 阅读全文
posted @ 2018-09-05 10:35 約束の空 阅读(118) 评论(0) 推荐(0)
摘要: 基础backtracing的题。 之前的方法需要一个used来判断元素是否被使用过。 而下面这种方法思路很不错,每次交换数组里两个元素,当前面都枚举完毕后,从[start,...,end]依次交换。 阅读全文
posted @ 2018-09-05 05:25 約束の空 阅读(106) 评论(0) 推荐(0)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 22 下一页