- 今天的题目对我来说有点难,都是先看视频后敲的
977.有序数组的平方
- 给一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
- 代码随想录视频讲解链接: https://www.bilibili.com/video/BV1QB4y1D7ep
/*
* @lc app=leetcode.cn id=977 lang=java
* @lcpr version=21917
*
* [977] 有序数组的平方
*/
// @lc code=start
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ret = new int[nums.length];
int k = nums.length - 1;
for(int i = 0, j = nums.length - 1; i <= j; ){
if(nums[i] * nums[i] > nums[j] * nums[j]){
ret[k--] = nums[i] * nums[i];
i++;
}else{
ret[k--] = nums[j] * nums[j];
j--;
}
}
return ret;
}
}
// @lc code=end
/*
// @lcpr case=start
// [-4,-1,0,3,10]\n
// @lcpr case=end
// @lcpr case=start
// [-7,-3,2,3,11]\n
// @lcpr case=end
*/
209.长度最小的子数组
- 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回0。
- 代码随想录视频讲解链接: https://www.bilibili.com/video/BV1tZ4y1q7XE
/*
* @lc app=leetcode.cn id=209 lang=java
* @lcpr version=21917
*
* [209] 长度最小的子数组
*/
// @lc code=start
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int total = 0;
int tmp;
int ret = Integer.MAX_VALUE;
//j始终指向移动窗口的终止位,i指向起始位
for(int j = 0, i = 0; j < nums.length; j++){
total += nums[j];
while(total >= target){
tmp = j - i + 1;
ret = Math.min(tmp, ret);
total -= nums[i++];
}
}
return ret == Integer.MAX_VALUE ? 0 : ret;
}
}
// @lc code=end
/*
// @lcpr case=start
// 7\n[2,3,1,2,4,3]\n
// @lcpr case=end
// @lcpr case=start
// 4\n[1,4,4]\n
// @lcpr case=end
// @lcpr case=start
// 11\n[1,1,1,1,1,1,1,1]\n
// @lcpr case=end
*/
59.螺旋矩阵II
- 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
- 代码随想录视频讲解链接: https://www.bilibili.com/video/BV1SL4y1N7mV/
/*
* @lc app=leetcode.cn id=59 lang=java
* @lcpr version=21917
*
* [59] 螺旋矩阵 II
*/
// @lc code=start
class Solution {
public int[][] generateMatrix(int n) {
int[][] ret = new int[n][n];
int r = 1;//轮次
int count = 1;
int x = 0, y = 0;
int i = 0, j = 0;
int offset = 1;
while(r <= n / 2){
for(j = y; j < n - offset; j++){
ret[x][j] = count++;
}
for(i = x; i < n - offset; i++){
ret[i][j] = count++;
}
for(; j > y; j--){
ret[i][j] = count++;
}
for(; i > x; i--){
ret[i][j] = count++;
}
x++;
y++;
offset++;
r++;
}
if(n % 2 == 1){
ret[x][y] = count;
}
return ret;
}
}
// @lc code=end
/*
// @lcpr case=start
// 3\n
// @lcpr case=end
// @lcpr case=start
// 1\n
// @lcpr case=end
*/