方法:暴力
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;
}
};
时间复杂度O(), 空间复杂度O(1);
方法:双指针
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
vector<int> res(n, 0);
int l = 0, r = n - 1, k = n - 1;
while (l <= r) {
if (nums[l] * nums[l] > nums[r] * nums[r]) {
res[k--] = nums[l] * nums[l];
++l;
} else {
res[k--] = nums[r] * nums[r];
--r;
}
}
return res;
}
};
时间复杂度O(n), 空间复杂度O(n);
方法:双指针
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int l = 0, r = 0, cur = 0, res = INT_MAX;
while (r < nums.size()) {
cur += nums[r++];
while (cur >= target) {
cur -= nums[l++];
res = min(res, r-l+1);
}
}
return res == INT_MAX ? 0 : res;
}
};
时间复杂度O(n), 空间复杂度O(1);
方法:模拟
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>res(n, vector<int>(n, 0));
int stx = 0, sty = 0, loop = n/2, mid = n/2, cnt = 1, j, i, bas = 1;
while(loop--) {
i = stx;
j = sty;
for(j = sty; j < n - bas; ++j) res[i][j] = cnt++;
for(i = stx; i < n - bas; ++i) res[i][j] = cnt++;
for(; j > sty; --j) res[i][j] = cnt++;
for(; i > stx; --i) res[i][j] = cnt++;
++stx;
++sty;
++bas;
}
if(n%2) res[mid][mid] = cnt;
return res;
}
};
时间复杂度O(n), 空间复杂度O(1);