977. 有序数组的平方
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> res(nums.size());
int right=nums.size()-1;
int left=0;
for(int i=nums.size()-1;i>=0;i--)
{
if(nums[left]*nums[left]<=nums[right]*nums[right])
{
res[i]=nums[right]*nums[right];
right--;
}
else
{
res[i]=nums[left]*nums[left];
left++;
}
}
return res;
}
};
由于原来的数组是有序的,所以平方后最大的一项不是在最左边就是在最右边,用双指针,一个指左,一个指右,将大的赋值到新数组中。
209. 长度最小的子数组
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int min=nums.size()+1;
int slow=0;
int sum=0;
for(int fast=0;fast<nums.size();fast++)
{
sum+=nums[fast];
while(sum>=s)
{
if(min>(fast-slow+1)) min=fast-slow+1;
sum=sum-nums[slow];
slow++;
}
}
if(min==nums.size()+1) return 0;
else return min;
}
};
双指针,for循环里的那个while是精髓
59. 螺旋矩阵 II
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int loop=n/2;
int mid=n/2;
int offset=1;
int startx=0,starty=0,count=1,i,j;
while(loop--)
{
i=startx;
j=starty;
for(;j<n-offset;j++)
{
res[i][j]=count;
count++;
}
for(;i<n-offset;i++)
{
res[i][j]=count;
count++;
}
for(;j>starty;j--)
{
res[i][j]=count;
count++;
}
for(;i>startx;i--)
{
res[i][j]=count;
count++;
}
startx++;
starty++;
offset++;
}
if(n%2!=0) res[mid][mid]=count;
return res;
}
};
今天做了五道题,与昨天的题目相比,稍微难一点,需要重新刷的题目为
904.水果成篮
76.最小覆盖子串
59.螺旋矩阵II
54. 螺旋矩阵