其实也不清楚是不是day2…
59
给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序 排序。
//sort!启动!
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0;i<nums.size();i++) nums[i]=nums[i]*nums[i];
sort(nums.begin(),nums.end());
return nums;
}
};
209
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
真的很容易超时…
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
//INT32_MAX是C++中<limits.h>头文件中定义的常量,表示32位带符号整数类型int的最大值。其值为2147483647,即2^31-1
//求最小值,先初始化最大值
int res=INT32_MAX;
int sum=0;
int i=0,j=0;//双指针一前一后找最短长度
while(j<nums.size()){
sum+=nums[j++];//右指针往右推进,注意这里推完后j会加1,所以求长度不需要再加
while(sum>=target){
res=min(res,j-i);
sum-=nums[i++];//左指针往右推进,缩小长度更新
}
}
return res==INT32_MAX?0:res;
}
};
59
给定一个正整数 n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//定义了一个n行n列的二维矩阵(即矩阵的大小为 n×n),并将其初始化为全零。
vector<vector<int>> res(n,vector<int>(n,0));
//坐标填数,右下左上
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
for(int i=0,x=0,y=0,d=0;i<n*n;i++){
//每填一个数都加1
res[x][y]=i+1;
//更新坐标
int a=x+dx[d],b=y+dy[d];
//如果行或者列到头了,就改一下d
if(a<0||b<0||a==n||b==n||res[a][b]){
d=(d+1)%4;//d是几,取决于这是第几次转弯
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
return res;
}
};