玉器珠宝做网站,网络空间安全就业前景,seo关键词排名优化怎么做,运维工程师是青春饭吗977
思路
使用两个指针分别指向位置 0 和 n−1#xff0c;每次比较两个指针对应的数#xff0c;选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况。
时间复杂度#xff1a;O(n) 空间复杂度#xff1a;O(1)
代码
class Solution {
pub…977
思路
使用两个指针分别指向位置 0 和 n−1每次比较两个指针对应的数选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况。
时间复杂度O(n) 空间复杂度O(1)
代码
class Solution {
public:vectorint sortedSquares(vectorint nums) {int left 0;int right nums.size()-1;int last right;vectorint ans(nums.size());while(leftright){if(nums[left]*nums[left]nums[right]*nums[right]){ans[last--]nums[left]*nums[left];}else{ans[last--]nums[right]*nums[right--];}}return ans;}
};209
思路
所谓滑动窗口就是不断的调节子序列的起始位置和终止位置从而得出我们要想的结果。 窗口的起始位置如何移动如果当前窗口的值大于等于s了窗口就要向前移动了也就是该缩小了。 窗口的结束位置如何移动窗口的结束位置就是遍历数组的指针也就是for循环里的索引。 滑动窗口的精妙之处在于根据当前子序列和大小的情况不断调节子序列的起始位置。从而将O(n^2)暴力解法降为O(n)。
时间复杂度O(n) 空间复杂度O(1)
代码
class Solution {
public:int minSubArrayLen(int target, vectorint nums) {int sum 0, sublen 0, i0;int result INT32_MAX;for (int j0; jnums.size(); j){sumnums[j];while(sumtarget){sublen j-i1;result sublenresult?sublen:result;sum - nums[i];}}return result INT32_MAX?0:result;}
};