207 阅读1分钟

# 977. 有序数组的平方

## 双指针法

#### class Solution {

``````public int[] sortedSquares(int[] nums) {
int len=nums.length-1;
for(int i=0;i<=len;i++){
nums[i]=nums[i]*nums[i];
}//平方后排序
/*
Arrays.sort(nums);
return nums;*/
//双指针法
int result[]=new int[nums.length];
int index=result.length-1;
int left=0;int right=len;
while(left<=right){
if(nums[left]<nums[right]){
result[index--]=nums[right--];
}
else{
result[index--]=nums[left++];
}
}
return result;
}
``````

}

# 209. 长度最小的子数组

## 滑动窗口思想

#### class Solution {

``````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

#### class Solution {

``````public int[][] generateMatrix(int n) {
int maxNum = n * n;
int curNum = 1;
int[][] matrix = new int[n][n];
int row = 0, column = 0;
int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右下左上
int directionIndex = 0;
while (curNum <= maxNum) {
matrix[row][column] = curNum;
curNum++;
int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || matrix[nextRow][nextColumn] != 0) {
directionIndex = (directionIndex + 1) % 4; // 顺时针旋转至下一个方向
}
row = row + directions[directionIndex][0];
column = column + directions[directionIndex][1];
}
return matrix;
}
``````

}