1.长度最小的子数组:代码随想录
使用滑动窗口解题,也是相当于双指针,只是实现过程像窗口滑动才叫滑动窗口。
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
*/
package TrainingCamp;
/**
* 长度最小的子数组
*
* https://leetcode.cn/problems/minimum-size-subarray-sum/
*
* 滑动窗口 / 双指针 / 暴力循环(超时)
*/
public class _2_1MinLengthSubarray {
private static int findMinLenArr(int[] nums, int target) { //滑动窗口毛毛虫
//判断是否为空
if (nums.length == 0) {
return 0;
}
int sum = 0;
int left = 0;
int result = Integer.MAX_VALUE; //result存放的是子数组的长度,最开始得存最大长度,后面碰到小的替换下就行
for (int right = 0; right < nums.length; right++) {
/**
* 个人感觉for循环里面这个已经相当于一个模板了
* 可以理解为 毛毛虫减肥,但是还得满足最低食量,找到满足食量的最简单吃法
* 前后指针的移动过程理解为毛毛虫蠕动
*
* 先吃一个进去(头指针)
* 判断下有没有吃撑,吃撑了就
* 对比一下是不是最简单的吃法
* 再拉(尾指针)一个出来
* 还撑的话继续拉,直到吃不够了
*/
sum += nums[right];
while (sum >= target) {
result = Math.min(result, right - left + 1);
sum -= nums[left++];
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
public static void main(String[] args) {
int[] nums = {2, 3, 1, 2, 4, 9, 9, 9, 9, 3};
int target = 7;
System.out.println(findMinLenArr(nums, target));
}
}
注意while循环,不是if,左边可以减好几次
注意result的声明
滑动窗口其实就是变化的双指针,类似毛毛虫吃东西,少了吃,多了拉,一个首一个尾。
2.螺旋矩阵:代码随想录
学习到了模拟转圈的过程,但是个人感觉肯定会忘,螺旋矩阵的题还需要再巩固一下,周末可以复习复习。
package LuStudy;
import java.util.Arrays;
/*
* 螺旋矩阵II
*
* https://leetcode.cn/problems/spiral-matrix-ii/
*
*/
public class _2_2SpiralMatrix {
private static int[][] findSpiralMatrix(int n) {
int[][] nums = new int[n][n];
int startX = 0, startY = 0; // 每次循环不变量的坐标,每转一圈才更新一次
int offSet = 1; // 右区间的宽度,保持左闭右开
int loop = 1; // 圈数
int count = 1; // 题目条件
int i, j; // 旋转行或者列
while (loop <= n / 2) {
for (j = startY; j < n - offSet; j++) {
nums[startX][j] = count++;
}
for (i = startX; i < n - offSet; i++) {
nums[i][j] = count++;
}
for (; j > startY; j--) {
nums[i][j] = count++;
}
for (; i > startX; i--) {
nums[i][j] = count++;
}
startX++;
startY++;
loop++;
offSet++;
if (n / 2 == 1) {
nums[startX][startY] = count;
}
}
return nums;
}
public static void main(String[] args) {
int n = 4;
System.out.println(Arrays.deepToString(findSpiralMatrix(n)));
}
}
3.区间和:58. 区间和 | 代码随想录 (programmercarl.com)
前缀和的扩充,没啥难度。
4.开发商购买土地
还没刷,周末试试这个扩展题。休息休息。