1.977. 有序数组的平方
暴力:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0;i<nums.size();i++)
{
nums[i]=pow(nums[i],2);
}
sort(nums.begin(),nums.end());
return nums;
}
};
双指针:分别从数组头和数组尾开始,整个数组是有序的,两边绝对值大于中间,所以从两头开始找
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int sp=0,fp=nums.size()-1;
int k=nums.size()-1;
vector<int> v;
v.resize(k+1);
while(sp<=fp)
{
if(nums[sp]*nums[sp]>=nums[fp]*nums[fp])
{
v[k--]=nums[sp]*nums[sp];
sp++;
}
else
{
v[k--]=nums[fp]*nums[fp];
fp--;
}
}
return v;
}
};
2.209. 长度最小的子数组
双指针(滑动窗口):一个固定头,一个固定尾,for里的是尾,即尾指针移动,判断区间内和是否大于target且区间长度更小
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n=nums.size();
int length=n+1;
int sp=0,fp=0;
int sum=0;
for(fp;fp<n;fp++)
{
sum+=nums[fp];
while(sum>=target)
{
length=min(length,fp-sp+1);
sum-=nums[sp++];
}
}
if(length==n+1)
return 0;
return length;
}
};
暴力:但是超时了
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n=nums.size();
int length=n+1;
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
sum+=nums[j];
if(sum>=target)
{
length=min(length,j-i+1);
break;
}
}
sum=0;
}
if(length==n+1)
return 0;
return length;
}
};