日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求滑动窗口中的最大值和最小值

發布時間:2024/1/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求滑动窗口中的最大值和最小值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

滑動窗口: 一般使用雙指針算法,左指針l和右指針r之間的空間稱為窗口,由于指針是不斷移動的,從而窗口也可以移動,稱為滑動窗口。
?

滑動窗口的最值: 由于窗口是移動的,移動的過程中有新元素的加入也有舊元素的彈出。每一次元素的加入或彈出都可能使窗口中元素的最值發生變化,也正是會發生變化,使得無法直接獲取任意時刻滑動窗口的最值。

?

單調隊列求滑動窗口最值: 雖然滑動窗口中不斷有新元素加入和舊元素彈出,但是始終都有一個特點就是新元素都是從右指針r處加入的,舊元素都是從左指針l處彈出的。當一個元素如果是當前窗口的最大值,則它前面的值就不需要保存,因為只要它在窗口中,最值就不會變成其他的值,而對于它后面的比它小的元素則要保存,因為它一點彈出,最大值就要發生變化,需要保存后面的比它小的值。類似可推最小值。

?

雙端隊列: 使用雙端隊列,維持隊列是一個單調隊列(最大值: 單調遞增隊列,最小值: 單調遞減隊列),每次最值就是雙端隊列的front

?

// LeetCode 1438. 絕對差不超過限制的最長連續子數組deque<int> maxx; deque<int> minn;while(r < sz){while (!maxx.empty() && nums[r] > maxx.back()) maxx.pop_back();while (!minn.empty() && nums[r] < minn.back()) minn.pop_back();maxx.push_back(nums[r]);minn.push_back(nums[r]);while(l < r && abs(maxx.front() - minn.front()) > limit){if (nums[l] == maxx.front()) maxx.pop_front();if (nums[l] == minn.front()) minn.pop_front();l ++;}if (abs(maxx.front() - minn.front()) <= limit){ans = max(ans, r - l + 1);}++r; }

?

?

總結

以上是生活随笔為你收集整理的求滑动窗口中的最大值和最小值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。