先说点废话,今天是真的精疲力尽,特别特别累,debug+装carla,明天就可以离职了,回学校安心的刷题了,天天白天上班晚上刷题真的顶不住,太累了。
OKOK来到正题吧,第一道题目之前做的现在忘记了,看了一眼题解回想起来了,老规矩先把题目抄下来:
给你一个按 非递减顺序 排序的整数数组 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]
class Solution {
public:
vector sortedSquares(vector& nums) {
int k = nums.size() - 1;
vectorresult (nums.size(),0);
for (int i = 0 , j = nums.size() - 1;i <= j;)
{
if(nums[i] * nums[i] < nums[j] * nums[j])
{
result[k--] = nums[j] * nums[j];
j--;
}
else
{
result[k--] = nums[i] * nums[i];
i++;
}
}
return result;
}
};
给定一个含有 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
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0
class Solution {
public:
vector sortedSquares(vector& nums) {
int k = nums.size() - 1;
vectorresult (nums.size(),0);
for (int i = 0 , j = nums.size() - 1;i <= j;)
{
if(nums[i] * nums[i] < nums[j] * nums[j])
{
result[k--] = nums[j] * nums[j];
j--;
}
else
{
result[k--] = nums[i] * nums[i];
i++;
}
}
return result;
}
};
这道题我开始想用暴力解法,但是做不对,这里是抄的滑动窗口,不是特别清楚原理
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
class Solution {
public:
vector> generateMatrix(int n) {
vector> ans(n, vector(n));
int startX = 0, startY = 0, offset = 1, count = 1, i, j, loop = n / 2, mid = n / 2;
while (loop--)
{
for (j = startX; j < n - offset; j++) {
ans[startX][j] = count++;
}
for (i = startY; i < n - offset; i++) {
ans[i][j] = count++;
}
for (; j > startY; j--) {
ans[i][j] = count++;
}
for (; i > startX; i--) {
ans[i][j] = count++;
}
startX++;
startY++;
offset += 1;
}
if (n % 2 == 1)
{
ans[mid][mid] = count;
}
return ans;
}
};
主要的思想还是一个边界思想,也就是循环不变量,保证一直都是左闭右开,然后一层层循环下来,如果n是奇数,那么则独自的给最中间的量赋值。