//暴力解法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0;i<nums.size();i++)
{
nums[i]*=nums[i];
}
sort(nums.begin(),nums.end());//时间复杂度nlog(n)
return nums;
}
};
977.有序数组的平方
209.长度最小的子数组
lass Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sublenth=0;//子串长度
int sum=0;//和
int result=INT32_MAX;//结果最大值
int i=0;//起点
for(int j=0;j<nums.size();j++)
{
sum+=nums[j];
while(sum>=target)//窗口内满足条件时进入循环
{
sublenth=j-i+1;//记录字串长度
result=result<=sublenth?result:sublenth;//如果当前子串长度比结果小,则记录结果为子串长度
sum-=nums[i++];//滑动窗口的精髓:当窗口内子串和大于目标时,移动起点 缩小窗口
}
}
return result==INT32_MAX?0:result;
}
};
在本题中实现滑动窗口,主要确定如下三点:
- 窗口内是什么?
- 如何移动窗口的起始位置?
- 如何移动窗口的结束位置?
窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。
窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。
窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
时间复杂度O(n)
59.螺旋矩阵二