977.有序数组的平方
题目链接: 力扣
暴力方法(直接采用平方后排序)
代码:
class Solution {
public int[] sortedSquares(int[] nums) {
for (int i = 0; i < nums.length; i++) {
nums[i] = nums[i] * nums[i];
}
Arrays.sort(nums);
return nums;
}
}
双指针法(关注两端的元素)
代码:
class Solution {
public int[] sortedSquares(int[] nums) {
int right = nums.length - 1;
int left = 0;
int[] result = new int[nums.length];
int index = result.length - 1;
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
// 正数的相对位置是不变的, 需要调整的是负数平方后的相对位置
result[index--] = nums[left] * nums[left];
++left;
} else {
result[index--] = nums[right] * nums[right];
--right;
}
}
return result;
}
}
209.长度最小的子数组
题目链接: 力扣
暴力解法(双循环)
代码:
public class Solution {
public int minSubArrayLen(int target, int[] nums) {
int result = Integer.MAX_VALUE; // 最终的结果
int sum = 0; // 子序列的数值之和
int subLength = 0; // 子序列的长度
for (int i = 0; i < nums.length; i++) { // 设置子序列起点为i
sum = 0;
for (int j = i; j < nums.length; j++) { // 设置子序列终止位置为j
sum += nums[j];
if (sum >= target) { // 一旦发现子序列和超过了target,更新result
subLength = j - i + 1; // 取子序列的长度
result = result < subLength ? result : sublength;
break; // 因为我们是找符合条件最短的子序列,所以一旦符合条件break
}
}
}
// 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
return result == Integer.MAX_VALUE ? 0 : result;
}
}
滑动窗口
代码:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int result = Integer.MAX_VALUE;
int i = 0;
int sum = 0;
int sublength = 0;
for (int j = 0; j < nums.length; j++) {
sum += nums[j];
while (sum >= target) {
sublength = j - i + 1;
result = (sublength < result) ? sublength : result;
sum -= nums[i];
i++;
}
}
return (result == Integer.MAX_VALUE) ? 0 : result;
}
}
59.螺旋矩阵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;
}
}