977:
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ans = new int[nums.length];
int left = 0, right = nums.length - 1;
for(int i = nums.length - 1; i >= 0 && left <= right; i--){
if(nums[left]*nums[left] < nums[right]*nums[right]){
ans[i] = nums[right]*nums[right];
right--;
}else{
ans[i] = nums[left]*nums[left];
left++;
}
}
return ans;
}
}
巧妙的双指针用法,得想到用右往左开始填新的array。
209:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int j = 0;
int sum = 0;
int res = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
while(sum >= target){
int len = i - j + 1;
res = sum == target ? len : res;
sum -= nums[j++];
}
}
return res;
}
}
感觉滑动窗口就是要注意如何移动左边指针
59
class Solution {
public int[][] generateMatrix(int n) {
int top = 0, bot = n-1, left = 0, right = n-1;
int[][] matrix = new int[n][n];
int k = 1;
while(k <= n*n){
for(int i = left; i <= right; i++){
matrix[top][i] = k++;
}
top++;
for(int i = top; i <= bot; i++){
matrix[i][right] = k++;
}
right--;
for(int i = right; i >= left; i--){
matrix[bot][i] = k++;
}
bot--;
for(int i = bot; i >= top; i--){
matrix[i][left] = k++;
}
left++;
}
return matrix;
}
}
做了很多次的模拟题了,就是小细节要掌握