这道题我犯了一个错误,就是arr[index] = nums[left++]*nums[left++],这是一个致命的错误,因为他将left加了两次1,一开始我还忘记平方了! 还有忘记了在if语句的条件判定中也要是两个数的平方进行比较!
class Solution {
public int[] sortedSquares(int[] nums) {
int[] arr = new int[nums.length];
int left = 0;
int right = nums.length-1;
int index = nums.length-1;
while(left<=right){
if(nums[right]*nums[right]<=nums[left]*nums[left]){
arr[index] = nums[left]*nums[left];
left++;
}else{
arr[index] = nums[right]*nums[right];
right--;
}
index--;
}
return arr;
}
}
59. 螺旋矩阵 II
这道题我之前做过两次了花费了很多时间,这次做依然出现了一些问题
问题一:在每次循环之后忘记将num加1 这个会导致这个数组尽管是以螺旋形式添加的,但是每个数组都是1,并且循环无法退出!!!!!!!!!!!!!!!!!!!!!!!!!!!
问题二:边界问题,我这个思路是按照leetcode题解有个大佬的题解来进行的,所以是每一行遍历结束要往里压缩边界,上边界和左边界是加1 下边界和右边界是减1
class Solution {
public int[][] generateMatrix(int n) {
int[][] mat= new int [n][n];
int l = 0,r = n - 1 ,u = 0 ,d = n - 1;
int num = 1;
while(num<=(n*n)){
for(int i = l;i<=r;i++){
mat[u][i] = num++;
}
u++;
for(int i = u;i<=d;i++){
mat[i][r] = num++;
}
r--;
for(int i = r;i>=l;i--){
mat[d][i] = num++;
}
d--;
for(int i = d;i>=u;i--){
mat[i][l] = num++;
}
l++;
}
return mat;
}
}
这道题做过但是有思路,代码能力太差,忘记具体步骤
问题一:一定要记得result = Integer.MAX_VALUE 这个可以获得int类型的最大值!
问题二:滑动窗口的精髓在于每个数只操作了两次,进来一次出去一次,
进的操作由快指针fast操作,出的操作由慢指针操作
还有就是将记录的数加起来的总和sum
这个数快指针的操作加,慢指针的操作减
还要记得每次慢指针操作时要记得将总和sum与最小的结果result相比较取其中偏小的!
最后如果result没有操作 说明要返回0 而不是Integer.MAX_VALUE
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int fast = 0;
int slow = 0;
int result = Integer.MAX_VALUE;
int sum = 0;
for(fast = 0;fast<nums.length;fast++){
sum += nums[fast];
while(sum>=target){
result = Math.min(result,fast-slow+1);
sum-=nums[slow];
slow++;
}
}
if(result == Integer.MAX_VALUE){
return 0;
}
return result;
}
}