LeetCode 977. 有序数组的平方
题目描述:
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
解题思路
解法:
第一种写法(本人写法:直接排序 )
var sortedSquares = function(nums) {
let ans = new Array(nums.length);
for (let i = 0; i < nums.length; i++) {
ans[i] = nums[i] * nums[i];
}
ans.sort((a, b) => a - b);
return ans;
};
第二种写法(双指针)
var sortedSquares = function(nums) {
const n = nums.length
let ans = new Array(n)
let left = 0, right = n - 1, sortF = n - 1
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
ans[sortF] = nums[left] * nums[left];
left++;
} else {
ans[sortF] = nums[right] * nums[right];
right--;
}
sortF--;
}
return ans;
};
反思
LeetCode 209.长度最小的子数组
题目描述:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度**。**如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
解题思路
解法:
(滑动窗口)
var minSubArrayLen = function(target, nums) {
let i=0;
let sum=0;
let minlength=nums.length+1;
for(let j=0;j<nums.length;j++)
{
sum+=nums[j];
while(sum>=target)
{
let length=j-i+1;
minlength=minlength<length?minlength:length;
sum-=nums[i++];
}
}
if(minlength===(nums.length+1)) return 0;
else
return minlength;
};
LeetCode 59. 螺旋矩阵 II
题目描述:
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
解题思路
解法:
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function(n) {
let arr= Array.from(Array(n), () => Array(n).fill(0));
let offset=1;
let startX=0,startY=0;
let numbs=1;
let mid=Math.floor(n/2);
let loop=Math.floor(n/2);
while(loop--){
let i=startX,j=startY
for( ;j<n-offset;j++)
arr[i][j]=numbs++;
for( ;i<n-offset;i++)
arr[i][j]=numbs++;
for( ;j > startY; j--)
arr[i][j]=numbs++;
for( ;i > startX; i--)
arr[i][j]=numbs++;
startX++;
startY++;
offset += 1;
}
if(n%2==1) arr[mid][mid]=numbs++;
return arr;
};