977 有序数组的平方
链接:LeetCode977
思路:包含的负数的非递减数组平方后,最大的数还是在数组两边,可以利用双指针,有序的将平方数存到另一个数组里
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length - 1;
int[] res = new int[nums.length];
int cnt = nums.length - 1;
while(left <= right) {
if(nums[left] * nums[left] >= nums[right] * nums[right]) {
res[cnt--] = nums[left] * nums[left];
left++;
}
else {
res[cnt--] = nums[right] * nums[right];
right--;
}
}
return res;
}
}
209 长度最小的子数组
链接:LeetCode209
思路:双指针
注意:LeetCode 热评第一条
public int minSubArrayLen(int target, int[] nums) {
int left = 0;
int sum = 0;
int result = Integer.MAX_VALUE;
for (int right = 0; right < nums.length; right++) {
sum += nums[right];
while (sum >= target) {
result = Math.min(result, right - left + 1);
sum -= nums[left++];
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
59.螺旋矩阵II
链接:LeetCode 59
思路: 注意循环不变性,选择左闭右开后所有地方要保持一致
public int[][] generateMatrix(int n) {
int loop = 0;
int[][] res = new int[n][n];
int start = 0;
int count = 1;
int i = 0;
int j = 0;
while(loop++ < n /2) {
for(j = start;j < n - loop; j++) {
res[start][j] = count++;
}
for(i = start;i < n - loop; i++){
res[i][j] = count++;
}
for(;j >= loop; j--) {
res[i][j] = count++;
}
for(;i >= loop; i--) {
res[i][j] = count++;
}
start++;
}
if (n % 2 == 1) {
res[n/2][n/2] = count;
}
return res;
}