class Solution { public int[] sortedSquares(int[] nums) { int len = nums.length; int[] res = new int[len]; int i=0,j=len-1; int p=len-1; while(i<=j) { if(Math.abs(nums[i])>=Math.abs(nums[j])) { res[p] = nums[i]*nums[i]; p--; i++; }else if(Math.abs(nums[i])<Math.abs(nums[j])){ res[p] = nums[j]*nums[j]; p--; j--; } } return res; } } |
双指针的思路比较难想,想到了要用双指针,就挺简单的。Math.abs(),要有Math前缀,总是忘记。
class Solution { public int minSubArrayLen(int target, int[] nums) { int len = nums.length; int left = 0; int res = Integer.MAX_VALUE; int sum=0; for(int right=0;right<len;right++) { sum+=nums[right]; while(sum>=target) { res = res<(right-left+1)?res:(right-left+1); sum-=nums[left]; left++; } } return res==Integer.MAX_VALUE?0:res; } } |
通过这道题,对滑动窗口有了更好的理解,觉得可以再二刷。
class Solution { public int[][] generateMatrix(int n) { int start = 0; int i,j; int loop=0; int[][] res = new int[n][n]; int count=1; while(loop++<n/2) { i=start; for(j=start;j<n-loop;j++) { res[i][j]=count++; } for(i=start;i<n-loop;i++) { res[i][j]=count++; } for(;j>start;j--) { res[i][j]=count++; } for(;i>start;i--) { res[i][j]=count++; } start++; } if(n%2==1) { res[start][start]=count++; } return res; } } |
这道题我一定要二刷,关于循环不变量原则,我十分薄弱,需要加强。
这是代码随想录的文章解析,我觉得很好。