977、有序数组的平方
双指针思路:两个指针分别从数组两端开始遍历
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {vector<int> answer(nums.size(), 0);int left = 0;int right = nums.size() - 1;int k = nums.size() - 1;while(left <= right) {if(nums[left]*nums[left] > nums[right]*nums[right]) {answer[k--] = nums[left]*nums[left];left++;}else{answer[k--] = nums[right]*nums[right];right--;}}return answer;}
};
时间复杂度:O(n)
空间复杂度:O(n)
209、长度最小的子数组
滑动窗口思路:用两个指针确定滑动窗口的首尾两端,记录滑动窗口的值,若比目标值小,扩大窗口,若比目标值小或相等,缩小窗口。
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int count = 0;int length = INT32_MAX;int j = 0;for(int i = 0; i < nums.size(); i++) {count += nums[i];while(count >= target) {int flag = i - j + 1;length = length < flag ? length : flag;count -= nums[j];j++;}}return length == INT32_MAX ? 0 : length;}
};
时间复杂度:O(n)
空间复杂度:O(1)