977.有序数组的平方
- 刷题
https://leetcode.cn/problems/squares-of-a-sorted-array/
- 文章讲解
https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html
- 视频讲解
https://www.bilibili.com/video/BV1QB4y1D7ep
-
题解:
class Solution {
public int[] sortedSquares(int[] nums) {
// 快慢指针法得到数组平方绝对值
int low = 0;
int size = nums.length;
for(int fast = 0;fast < size; fast ++){
if(nums[fast]>=0){
nums[low++] = nums[fast] * nums[fast];
}
else{
nums[low++] = Math.abs(nums[fast] * nums[fast]);
}
}
// 针对负数情况,对整个数组冒泡排序
for(int i = 0; i < size-1;i ++){
for(int j = 0;j < size - i - 1;j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
return nums;
}
}
209.长度最小的子数组
- 刷题
https://leetcode.cn/problems/minimum-size-subarray-sum/
- 文章讲解
https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
- 视频讲解
https://www.bilibili.com/video/BV1tZ4y1q7XE
-
题解:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
// 滑动窗口解法
int i = 0,sum = 0,result = (int)Math.pow(10,5),L = 0;
// 定义当前滑过的元素个数以及是否有过符合要求的子数组
// 便于处理整个目标数组的和都小于target的情况
int num = 0;
Boolean flag = false;
for(int j = 0;j < nums.length;j ++){
sum += nums[j];
num ++;
while(sum >= target){
// 记录当前长度
L = j - i + 1;
// 记录历史最小长度
result = Math.min(L,result);
// i向后移动
sum -= nums[i];
i++;
flag = true;
}
if(num == nums.length && !flag){
result = 0;
}
}
return result;
}
}
59.螺旋矩阵II
- 刷题
https://leetcode.cn/problems/spiral-matrix-ii/
- 文章讲解
https://programmercarl.com/0059.%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5II.html
- 视频讲解
https://www.bilibili.com/video/BV1SL4y1N7mV/
-
题解:
class Solution {
public int[][] generateMatrix(int n) {
// 采用左闭右开原则
// 通过三个变量控制螺旋循环
int startX = 0,startY = 0,offset = 1;
int [][] matrix = new int [n][n];
int i = 0,j = 0;
int count = 1;
// 用来标记偶数n下转的圈数
int num = n / 2;
// 用来标记若奇数n下最后一个元素的位置
int finalX = 0,finalY = 0;
// 若n为1,单独处理
if(n == 1){
matrix[i][j] = 1;
}
// 若n为奇数,处理最后一个元素
if(n % 2 == 1){
matrix[num][num] = n * n;
}
while(num != 0){
for(j = startY; j < n - offset; j++){
matrix[startX][j] = count++;
}
for(i = startX; i < n - offset; i++){
matrix[i][j] = count++;
}
for( ; j > startY; j --){
matrix[i][j] = count++;
}
for( ; i > startX; i --){
matrix[i][j] = count++;
}
startX++;
startY++;
offset++;
num--;
}
return matrix;
}
}