乐趣区

关于leetcode:代码随想录打卡day2

977,有序数组的平方排序

class Solution {public int[] sortedSquares(int[] a) {
        // 每次往两侧找,取两侧最大的一个,放入队列中最初当成最大的
        int left = 0;
        int right = a.length -1;
        int rail_ptr = a.length -1;
        int[] b = new int[a.length];
        while(left <= right) {if (a[left]*a[left] > a[right]*a[right]) {b[rail_ptr] = a[left] * a[left];
                rail_ptr--;
                left++;
            }
            else {b[rail_ptr] = a[right]*a[right];
                rail_ptr--;
                right--;
            }
        }
        return b;
    }
}

209,长度最小的子序列
办法:滑动窗口

class Solution {public int minSubArrayLen(int target, int[] a) {
        // i 是后指针,j 是前指针
        //sum 用来判断从 0 到 i,这 i + 1 个元素之和有没有达到 target 的根底条件
        // 达到之后,再缩小 j,看区间能不能放大
        // 留神,这里的 j 是枯燥的,比方 i = i1 时,对应 [j1,i1] 是最小区间
        // 那么 i = i2 > i1,[j1,i2]必然满足条件而且区间长度比 [j1,i1] 大 1,// 须要淘汰,前指针从 j1+ 1 开始,也就是测试区间从 [j1+1,i1+1] 开始
        int minlen = Integer.MAX_VALUE;
        int   jlen = Integer.MAX_VALUE;
        int sum = 0;
        int   j = 0;
        for (int i = 0; i < a.length; i++) {sum += a[i];
            while (sum >= target) {sum -= a[j];
                jlen = i-j+1;
                minlen = Math.min(minlen, jlen);
                j++;
            }
        }
        //min 通过批改,阐明找到满足 target 的区间;min 未通过批改,阐明没找到
        return minlen = (minlen == Integer.MAX_VALUE)? 0 : minlen;
    }
}

59,螺旋矩阵
办法:找法则

class Solution {public int minSubArrayLen(int target, int[] a) {
        // i 是后指针,j 是前指针
        //sum 用来判断从 0 到 i,这 i + 1 个元素之和有没有达到 target 的根底条件
        // 达到之后,再缩小 j,看区间能不能放大
        // 留神,这里的 j 是枯燥的,比方 i = i1 时,对应 [j1,i1] 是最小区间
        // 那么 i = i2 > i1,[j1,i2]必然满足条件而且区间长度比 [j1,i1] 大 1,// 须要淘汰,前指针从 j1+ 1 开始,也就是测试区间从 [j1+1,i1+1] 开始
        int minlen = Integer.MAX_VALUE;
        int   jlen = Integer.MAX_VALUE;
        int sum = 0;
        int   j = 0;
        for (int i = 0; i < a.length; i++) {sum += a[i];
            while (sum >= target) {sum -= a[j];
                jlen = i-j+1;
                minlen = Math.min(minlen, jlen);
                j++;
            }
        }
        //min 通过批改,阐明找到满足 target 的区间;min 未通过批改,阐明没找到
        return minlen = (minlen == Integer.MAX_VALUE)? 0 : minlen;
    }
}
退出移动版