有序数组的平方
解析:本题我们主要考虑是负数的元素,采用双指针左右两边进行比较,选择大的平方数插入到res数组中
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
class Solution {
public int[] sortedSquares(int[] nums) {
int index = nums.length-1;
int left = 0;
int right = index;
int res[] = new int[nums.length];
while(left <= right){
if(nums[left]*nums[left] > nums[right]*nums[right]){
res[index--] = nums[left] * nums[left];
left++;
}else{
res[index--] = nums[right] * nums[right];
right--;
}
}
return res;
}
}
长度最小的子数组
解析:本题采用滑动窗口,如果数组之和>=target的话,就会滑动前指针,达到寻找最短满足条件的数组长度。
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int sum = 0;
int k = 0;
int minLen = Integer.MAX_VALUE;
for(int i = 0 ; i < nums.length ; i++){
sum += nums[i];
while(sum >= target){
minLen = minLen > (i-k+1) ? (i-k+1) : minLen;
sum -= nums[k++];
}
}
return minLen == Integer.MAX_VALUE ? 0 : minLen;
}
}
螺旋矩阵II
解析:主要还是使用loop来控制主要遍历的长度
题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0;
int[][] res = new int[n][n];
int start = 0;
int count = 1;
int i, j;
while (loop++ < n / 2) {
for (j = start; j < n - loop; j++) {
res[start][j] = count++;
}
for (i = start; i < n - loop; i++) {
res[i][j] = count++;
}
for (; j >= loop; j--) {
res[i][j] = count++;
}
for (; i >= loop; i--) {
res[i][j] = count++;
}
start++;
}
if (n % 2 == 1) {
res[start][start] = count;
}
return res;
}
}