977.有序數(shù)組的平方:
雙指針?lè)?,原?lái)數(shù)組是有序的,說(shuō)明平房之后最左和最右兩邊的平方和是最大的,比較最大的插入新的vector數(shù)組,然后移動(dòng)指針選下一個(gè)元素進(jìn)行比較。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left= 0;
int right = nums.size()-1;
int k =right;
vector<int> res(nums.size(),0);
while(left<=right){
if(nums[left]*nums[left]<nums[right]*nums[right]){
res[k--] = nums[right]*nums[right];
right--;
}
else{
res[k--] = nums[left]*nums[left];
left++;
}
}
return res;
}
};
209:長(zhǎng)度最小的子數(shù)組
接下來(lái)就開(kāi)始介紹數(shù)組操作中另一個(gè)重要的方法:滑動(dòng)窗口。
所謂滑動(dòng)窗口,就是不斷的調(diào)節(jié)子序列的起始位置和終止位置,從而得出我們要想的結(jié)果。
在暴力解法中,是一個(gè)for循環(huán)滑動(dòng)窗口的起始位置,一個(gè)for循環(huán)為滑動(dòng)窗口的終止位置,用兩個(gè)for循環(huán) 完成了一個(gè)不斷搜索區(qū)間的過(guò)程。
那么滑動(dòng)窗口如何用一個(gè)for循環(huán)來(lái)完成這個(gè)操作呢。
首先要思考 如果用一個(gè)for循環(huán),那么應(yīng)該表示 滑動(dòng)窗口的起始位置,還是終止位置。
如果只用一個(gè)for循環(huán)來(lái)表示 滑動(dòng)窗口的起始位置,那么如何遍歷剩下的終止位置?
此時(shí)難免再次陷入 暴力解法的怪圈。
所以 只用一個(gè)for循環(huán),那么這個(gè)循環(huán)的索引,一定是表示 滑動(dòng)窗口的終止位置。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int res = INT_MAX;
int sum = 0;
int i = 0;
int sub_length = 0;
for(int j = 0;j<nums.size();j++){
sum +=nums[j];
while(sum>=target){
sub_length = j-i+1;
res= res<sub_length?res:sub_length;
sum -=nums[i++]; //這里體現(xiàn)出滑動(dòng)窗口的精髓之處,不斷變更i(子序列的起始位置)
}
}
return res == INT_MAX?0:res;
}
};
59.螺旋矩陣II
????????注意循環(huán)繪制的時(shí)候區(qū)間問(wèn)題,統(tǒng)一左閉右開(kāi),一圈一圈,最外邊一圈結(jié)束之后,再里邊一圈,起始的startx和starty要全部+1,n的奇數(shù)偶數(shù)決定了最終間是否需要補(bǔ)充元素。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-592116.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-592116.html
到了這里,關(guān)于LeetCode-Day2-977.有序數(shù)組的平方 ,209.長(zhǎng)度最小的子數(shù)組 ,59.螺旋矩陣II ,的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!