leetcode 977 题目链接:
https://leetcode.com/problems/squares-of-a-sorted-array/
最终ac代码:(双指针法)
class Solution{public: vector<int> sortedSquares(vector<int> &nums) { vector<int> v; int left = 0; int right = nums.size() - 1; while (left <= right) { if (nums[left] * nums[left] < nums[right] * nums[right]) { v.push_back(nums[right] * nums[right]); --right; } else { v.push_back(nums[left] * nums[left]); ++left; } } reverse(v.begin(), v.end()); return v; }};
std::vector operator[] 不做越界查看,vector::at 才查看
leetcode 209 题目链接:
https://leetcode.com/problems/minimum-size-subarray-sum/
ac代码:(滑动窗口) 毛病:圈复杂度比拟大
class Solution{public: int minSubArrayLen(int target, vector<int> &nums) { int wl = 0; int wr = 0; int wsum = 0; int minWlen = INT_MAX; while (true) { if (wsum < target) { if (wr == nums.size()) break; wsum += nums[wr]; ++wr; } else { int wlen = wr - wl; if (wlen < minWlen) minWlen = wlen; wsum -= nums[wl]; ++wl; } } if (minWlen == INT_MAX) return 0; return minWlen; }};
双循环版本(复杂度依然是O(n),圈复杂度升高):
class Solution{public: int minSubArrayLen(int target, vector<int> &nums) { int wl = 0; int wsum = 0; int minWlen = INT_MAX; for (int wr = 0; wr < nums.size(); ++wr) { wsum += nums[wr]; while (wsum >= target) { int wlen = wr - wl + 1; if (wlen < minWlen) minWlen = wlen; wsum -= nums[wl++]; } } if (minWlen == INT_MAX) return 0; return minWlen; }};
leetcode 59
https://leetcode.com/problems/spiral-matrix-ii/
ac代码:
class Solution{public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> v(n); for (int i = 0; i < v.size(); i++) { v[i] = vector<int>(n); } int square = n * n; int loopnum = n / 2; if (n % 2 == 1) { v[loopnum][loopnum] = square; } int num = 1; for (int i = 0; i < loopnum; i++) { for (int j = i; j < n - 1 - i; ++j) { v[i][j] = num++; } for (int j = i; j < n - 1 - i; ++j) { v[j][n - i - 1] = num++; } for (int j = n - i - 1; j > i; --j) { v[n - i - 1][j] = num++; } for (int j = n - i - 1; j > i; --j) { v[j][i] = num++; } } return v; }};