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; }}