977. 有序数组的平方
给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
关键:双指针
class Solution {
public int[] sortedSquares(int[] nums) {
int len = nums.length - 1;
int i = 0;
int j = len;
int[] res = new int[len+1];
while(i<=j){
if(nums[i]*nums[i]>nums[j]*nums[j]){
res[len--] = nums[i] * nums[i];
++i;
}else{
res[len--] = nums[j] * nums[j];
--j;
}
}
return res;
}
}
209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int i =0;
int sum = 0;
int result = Integer.MAX_VALUE;
for(int j = 0; j < nums.length; j++){
sum = sum + nums[j];
while(sum>=target){
int res = j - i + 1;
result = Math.min(result,res);
sum = sum - nums[i];
i++;
}
}
return result == Integer.MAX_VALUE? 0: result;
}
}
59. 螺旋矩阵II
给你一个正整数n,生成一个包含1到 n^2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0;
int[][] res = new int[n][n];
int start = 0;
int count = 1;
int i;
int j;
while(loop < n/2){
loop++;
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[start][start] = count;
}
return res;
}
}