6:35 三个解法没有完全按照模版来 比如第二个模版 line26 start = 1 end = n 则end - start = n - 1 而在前边的第二个模版里边 start = 0, end = len 则 end - start = len =n 还有个问题就是 在line30 return left 如何证明最后一次的left就是first bad?
我跑了一下对的呢呀,请问你是哪里不可以呢? //O(nlong) public int minSubArrayLen(int s, int[] nums) { int i = 1, j = nums.length, res = 0; while (i = 0) sum -= nums[i - size]; if (sum >= s) return true; } return false; }
@choliu19182 жыл бұрын
@@古城算法 我用的是Python写的,是不是语言的关系呀? input是[2,14] left = 1, right = 1 然后第一次while loop进去到二分法的那个function, 在for loop的时候,第一次sum 是2(i=0) 然后第二个sum是16(i=2),这个时候因为i-size = 0 所以sum-nums[1-1] sum就变成了14,所以二分法function return False. 那么 Left = mid + 1 变成了2, 所以while loop就跳出来了,这样的话res就还是0。 我把我得代码贴在下面 class Solution: def minSubArrayLen(self, s: int, nums: List[int]) -> int: n = len(nums) l,r = 1, n-1 res = 0 def helper(size,nums,s): cur_sum = 0 for i in range(len(nums)): cur_sum += nums[i] if i - size >=0: cur_sum -=nums[i-size] if cur_sum >= s: return True return False while l