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());
return nums;
}
};
有序数排序
用vector的快速排序法 时间复杂度是O(N2)
注意点的 小于等于 因为 最后一个值也要做出判断
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left =0;
int right = nums.size()-1;
int k =nums.size()-1;
vector<int>result(nums.size(),0);
while(left<=right)
{
if(nums[left]*nums[left]<nums[right]*nums[right])
{
result[k]=(nums[right]*nums[right]);
right--;
}
else{
result[k]=(nums[left]*nums[left]);
left++;
}
k--;
}
return result;
}
};
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int minisize=INT32_MAX;
int length =0;
int sum=0;
for(int i=0;i<nums.size();i++)
{
sum=0;
for(int j=i;j<nums.size();j++)
{
sum+=nums[j];
if(sum>=target)
{
length =j-i+1;
minisize = minisize<length?minisize:length;
break;
}
}
}
return minisize == INT32_MAX?0:minisize;
}
};
两个for 循环遍历所有长度得数组 时间复杂的是O(N2)
滑动窗口法
时间复杂度 在for 循环中j 从开头到结尾遍历一次 在while循环中
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>A(n,vector<int>(n,0));
int loop =n/2;
int number =1;
int center = n/2;
int startx = 0;
int starty = 0;
int looping =1;
while(loop--){
int i=startx;
int j=starty;
for(j =starty;j<n-looping;j++)
{
A[i][j]=number++;
}
for(i=startx;i<n-looping;i++){
A[i][j]=number++;
}
for(j=n-looping;j>startx;j--){
A[i][j]=number++;
}
for(i=n-looping;i>starty;i--){
A[i][j]=number++;
}
startx++;
starty++;
looping++;
}
if(n%2!=0){
A[center][center]=number;
};
return A;
}
};
思路 首先确定循环次数 loop为N/2;接着定义正在第几次循环looping
定义行的起始位置 列的起始位置 然后左闭右开 起始位置是列的起始位置 终止位置就是n-循环次数(举列子 n=5的话 第一次循环 是 0到3 第二次循环是1到2) 类比