977.有序数组的平方
977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/
解题思路:
很简单,双指针从大的开始就行,因为是可能有负数,最大的一定是从外侧向中心逼近
209. 长度最小的子数组
209. 长度最小的子数组https://leetcode.cn/problems/minimum-size-subarray-sum/
这道题看了半天,子数组的概念都没看好,导致混淆了 以为和子序列,子串等概念类似了,纠结于为什么不先排序,想了半天,
做题之前首先要搞清楚什么是子序列,什么是子串;
子序列是指一个字串中非连续的字串,例如:字串A:123456789 它有一个子序列a:13579(非连续) 它有一个子串b:12345(连续)。
1 子序列 是不要求连续的
2 子数组和子串一样,是需要连续的
但是无论是子序列和子数组,他们都可以看作是原数组的一部分,而且不会改变原来数组中元素的相对元素。(和一些题目求是否存在数组元素或者数组元素排列区别)
例题:01串找最长的01出现次数相等的子串,通过把‘0’当成-1,‘1’当成1,可以转化为最长的sum为0的子数组问题
总结:
解题思路:
子数组要求的就是连续的一段,并且要求也比较宽泛,需要>=target,
双指针滑动窗口,
一个左指针,一个右指针,先动一个指针,也就是 右指针向右膨胀,直到找到右指针合适的位置(sum>= target),
此时开始滑动左指针,不断逼近右指针试图找到最小段,(res=Math.min(res,right-left+1); left++)
最后边缘情况,怎么滑动都无法达到结果,res==Integer.MAX_VALUE ? 0 : res ;
59. 螺旋矩阵 II
59. 螺旋矩阵 IIhttps://leetcode.cn/problems/spiral-matrix-ii/纯模拟,K神的解析通俗易懂,非常不错
class Solution {
public int[][] generateMatrix(int n) {
int tar=n*n;
int i=0;
int num=1;
int t=0;
int b=n-1;
int l=0;
int r=n-1;
int[][] res=new int[n][n];
while(num<=tar){
//l -> r
for(i=l;i<=r;i++){
res[t][i]=num++;
}
t++;
//t -> b
for(i=t;i<=b;i++){
res[i][r]=num++;
}
r--;
//r -> l
for(i=r;i>=l;i--){
res[b][i]=num++;
}
b--;
//b -> t
for(i=b;i>=t;i--){
res[i][l]=num++;
}
l++;
}
return res;
}
}
K神解析: