代码随想录打卡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;
}
}
转载自:https://segmentfault.com/a/1190000043333671