每个元素平方然后排序
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; } };
双指针:数组开始和结束往中间都是从大到小的,可以定义两个指针,往中间移动,然后新建一个数组,从后到前赋值
class Solution { public: vector<int> sortedSquares(vector<int>& nums) { int i = 0,j = nums.size()-1, x= nums.size()-1; vector<int> result(nums.size()); while(i <= j){ int l = nums[i] * nums[i]; int r = nums[j] * nums[j]; if(l >= r){ result[x] = l; i++; }else{ result[x] = r; j--; } x--; } return result; } };
滑动窗口:
左端右端都是起始位置,右端右移,当大于等于target时,记录长度。然后左端右移,右端也右移,直到大于等于target,记录长度。循环
class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int result = INT_MAX; int i = 0,sum = 0; for(int j = 0; j < nums.size(); j++){ sum+=nums[j]; while(target <= sum){ result = min(result,j - i + 1); sum-=nums[i++]; } } return result == INT_MAX ? 0 : result; } };
确定四条边起始坐标,然后循环赋值
class Solution { public: vector<vector<int>> generateMatrix(int n) { int t = 0; // top int b = n-1; // bottom int l = 0; // left int r = n-1; // right vector<vector<int>> ans(n,vector<int>(n)); int k=1; while(k<=n*n){ for(int i=l;i<=r;++i,++k) ans[t][i] = k; ++t; for(int i=t;i<=b;++i,++k) ans[i][r] = k; --r; for(int i=r;i>=l;--i,++k) ans[b][i] = k; --b; for(int i=b;i>=t;--i,++k) ans[i][l] = k; ++l; } return ans; } };
浙公网安备 33010602011771号