关于for循环(leetcode 209长度最小的子数组)

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
      int lx = 0;
      int sum = 0;
      int length = nums.length;
      int rx = 0;
      int max = 0;
      for(int i=0;i=target&&rx-lx+1

上述是错误代码,错误不在于for循环中的rx(也就是通常的i不能修改),而在于

1、rx=lx应该在前,lx++应该在后,因为for循环已经有rx++,如果rx=lx在lx++后,会导致rx+2,会使右指针没能指向左指针lx

改成

rx=lx; 
lx++;

就可以右指针能重新指向左指针,重新开始一轮for循环

2、if(sum>=target&&rx-lx+1=target,再判断rx-lx+1

不然会导致当rx-lx+1>=length且sum>=target不能重新开始for循环,那么该轮for循环结束,就不能遍历整个数组

正确答案是

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
      int lx = 0;
      int sum = 0;
      int length = nums.length;
      int rx = 0;
      int max = 0;
      for(int i=0;i=target){
                   if(rx-lx+1

但对比最佳的滑动窗口法

似乎还是多了一些多余的寻找子数组的步骤

你可能感兴趣的:(leetcode,算法,数据结构)