国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法筆記--滑動窗口

這篇具有很好參考價值的文章主要介紹了算法筆記--滑動窗口。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

力扣209.長度最小子數(shù)組
https://leetcode.cn/problems/minimum-size-subarray-sum/

在這道題中要注意的不僅僅是滑動窗口的問題,更重要的問題是在循環(huán)控制中,不恰當(dāng)?shù)恼Z法使用會導(dǎo)致這道題出現(xiàn)很嚴(yán)重的問題,這導(dǎo)致我做這道題做了很多天,真的很崩潰。

代碼問題

先來看一下循環(huán)的控制問題,下面是我之前的錯誤代碼實例:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int left = 0, right = 0;
        int sum = 0;
        int retsize = 0;
        while(right < nums.size())
        {
            if(sum < target)
                sum += nums[right++];
            else
            {
                int size = right - left;
                if(retsize == 0 || retsize > size)
                    retsize = size;
                if(sum > target)
                {
                    while(sum >= target)
                        sum -= nums[left++];
                    int size = right - left + 1;
                    if(retsize > size)
                        retsize = size;
                }
            }
        }
        if(sum > target)
        {
            while(sum >= target)
                sum -= nums[left++];
            int size = right - left + 1;
            if(retsize > size)
                retsize = size;
        }
        return retsize;
    }
};

emmmm,之前寫的代碼中最主要的問題就在使用while循環(huán)的同時,right的移動是在滿足條件之后才可以移動,這會導(dǎo)致代碼變得非?;靵y。
所以在寫代碼的過程中,最好要保證一個變量是隨著循環(huán)規(guī)律性發(fā)生變換,而出些需要特殊處理的情況的時候,再對其進行特殊處理,盡可能保證代碼不會很亂而造成越界或者邊界的控制問題。
所以修改后的代碼如下:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int left = 0, right = 0;
        int sum = 0;
        int retsize = 0;
        while(right < nums.size())
        {
            sum += nums[right++];
            if (sum >= target)
            {
                while (sum >= target)
                {
                    int size = right - left;
                    if (retsize == 0 || retsize > size)
                        retsize = size;
                    sum -= nums[left++];
                }
            }
        }
        return retsize;
    }
};

滑動窗口問題

滑動窗口問題其實很簡單,就上面這道題而言,如果講這道題設(shè)計為暴力枚舉的解法,那么時間復(fù)雜度為O(n^2),但本質(zhì)上我們可以利用單調(diào)性規(guī)避很多沒必要的枚舉行為:
算法筆記--滑動窗口

起始位置時,right和left兩個指針指向同一個位置,left為左邊界,right為右邊界,之后移動右邊界并記錄邊界范圍內(nèi)的值的總和。
算法筆記--滑動窗口

當(dāng)right移動到這個位置的時候,范圍內(nèi)的數(shù)據(jù)總和已經(jīng)超過target(7),那么right繼續(xù)向后移動,必定會導(dǎo)致在符合大于target值的基礎(chǔ)上而這個范圍在繼續(xù)擴大。那么就可以確定不需要移動right,但是此時總和已經(jīng)大于target了,所以接下來就要移動left,但是每次移動我們并不知道移動之后是否還滿足條件,所以要進行循環(huán)判斷。

代碼就不貼了,上面有可以參考。這道題看起來很簡單,但最主要的是循環(huán)控制問題,切忌在循環(huán)體中使用條件控制循環(huán)變量的增減,否則會導(dǎo)致邊界很難控制。另外就是滑動窗口問題,滑動窗口利用了單調(diào)性,規(guī)避了很多沒必要的枚舉,這是滑動窗口的核心,它決定了哪些題目可以使用滑動窗口,哪些不可以。文章來源地址http://www.zghlxwxcb.cn/news/detail-515437.html

到了這里,關(guān)于算法筆記--滑動窗口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 滑動窗口實例1(長度最小的子數(shù)組)

    滑動窗口實例1(長度最小的子數(shù)組)

    給定一個含有? n ? 個正整數(shù)的數(shù)組和一個正整數(shù)? target ?。 找出該數(shù)組中滿足其和 ? ≥ target ? 的長度最小的? 連續(xù)子數(shù)組 ? [numsl, numsl+1, ..., numsr-1, numsr] ?,并返回其長度 。 如果不存在符合條件的子數(shù)組,返回? 0 ?。 示例 1: 示例 2: 示例 3: 提示: 1 = target = 109 1 =

    2024年02月11日
    瀏覽(18)
  • 【Leetcode刷題-Python/C++】長度最小的子數(shù)組(滑動窗口)

    209.長度最小的子數(shù)組 給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) target 。 找出該數(shù)組中滿足其和 ≥ target 的長度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其長度。如果不存在符合條件的子數(shù)組,返回 0 。 輸入:target = 7, nums = [2,3,1,2,4,3] 輸出:2 解釋:子數(shù)

    2023年04月08日
    瀏覽(25)
  • 力扣精選算法100題——水果成籃(滑動窗口專題)

    力扣精選算法100題——水果成籃(滑動窗口專題)

    本題鏈接??水果成籃 我就按照實例1來進行對這題的理解。 1代表種類類型,這個數(shù)組里面有2個種類類型 ps:種類1和種類2 ,只不過種類1是有2個水果,種類2有一個水果,共計3個水果。 本題需要解答:收集水果的最大數(shù)目. 但是前提條件: 我們只有2個籃子,每個籃子里只能裝

    2024年01月17日
    瀏覽(17)
  • 【算法|數(shù)組】滑動窗口

    【算法|數(shù)組】滑動窗口

    給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) target 。 找出該數(shù)組中滿足其和 ≥ target 的長度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其長度**。**如果不存在符合條件的子數(shù)組,返回 0 。 示例 1: 示例 2: 示例 3: 暴力解法 這種做法可以很容易想到,可是誰

    2024年02月12日
    瀏覽(16)
  • 【滑動窗口】長度最小的子數(shù)組|無重復(fù)字符的最長子串|最大連續(xù)1的個數(shù) III|將 x 減到 0 的最小操作數(shù)

    【滑動窗口】長度最小的子數(shù)組|無重復(fù)字符的最長子串|最大連續(xù)1的個數(shù) III|將 x 減到 0 的最小操作數(shù)

    1. 長度最小的子數(shù)組 - 力扣(LeetCode) (1)方法一:暴力列舉出所有的子數(shù)組的和 時間復(fù)雜度:O(n**2):枚舉所有子數(shù)組O(n**2) (2)方法二: 利用 單調(diào)性(兩個指針都不回退) ,使用\\\" 同向雙指針 \\\"(其實就是 滑動窗口 )來優(yōu)化 那么 滑動窗口過程 是怎么樣的? 1le

    2024年03月22日
    瀏覽(23)
  • 每日OJ題_算法_滑動窗口⑧_力扣76. 最小覆蓋子串

    目錄 力扣76. 最小覆蓋子串 解析及代碼 76. 最小覆蓋子串 - 力扣(LeetCode) 難度 困難 給你一個字符串? s ?、一個字符串? t ?。返回? s ?中涵蓋? t ?所有字符的最小子串。如果? s ?中不存在涵蓋? t ?所有字符的子串,則返回空字符串? \\\"\\\" ?。 注意: 對于? t ?中重復(fù)字符,

    2024年01月23日
    瀏覽(21)
  • Offer必備算法_滑動窗口_八道力扣OJ題詳解(由淺到深)

    Offer必備算法_滑動窗口_八道力扣OJ題詳解(由淺到深)

    目錄 滑動窗口算法介紹 ①力扣209. 長度最小的子數(shù)組 解析及代碼 ②力扣3. 無重復(fù)字符的最長子串 解析及代碼 ③力扣1004. 最大連續(xù)1的個數(shù) III 解析及代碼 ④力扣1658. 將x減到0的最小操作數(shù) 解析及代碼 ⑤力扣904. 水果成籃 解析及代碼1(使用容器) 解析及代碼2(開數(shù)組) ⑥

    2024年02月20日
    瀏覽(24)
  • 力扣精選算法100題——找到字符串中所有字母異位詞(滑動窗口專題)

    力扣精選算法100題——找到字符串中所有字母異位詞(滑動窗口專題)

    本題鏈接??找到字符串中所有字母異位詞 給定2個字符串s和p,找到s中所有p的變位詞的字串,就是p是\\\"abc\\\",在s串中找到與p串相等的字串,可以位置不同,但是字母必須相同,比如”bca\\\",\\\"bac\\\"等,都是可以被稱之為變位詞。最終返回與p串字母相等但排列不同的字符串的初始索引

    2024年01月19日
    瀏覽(28)
  • 每日OJ題_算法_滑動窗口⑦_(dá)力扣30. 串聯(lián)所有單詞的子串

    目錄 力扣30. 串聯(lián)所有單詞的子串 解析及代碼 30. 串聯(lián)所有單詞的子串 - 力扣(LeetCode) 難度 困難 給定一個字符串? s ? 和一個字符串?dāng)?shù)組? words 。 ? words ?中所有字符串? 長度相同 。 ? s ? 中的? 串聯(lián)子串 ?是指一個包含?? words ?中所有字符串以任意順序排列連接起來的

    2024年01月21日
    瀏覽(34)
  • 【動態(tài)規(guī)劃】【滑動窗口】【C++算法】 629K 個逆序?qū)?shù)組

    【動態(tài)規(guī)劃】【滑動窗口】【C++算法】 629K 個逆序?qū)?shù)組

    視頻算法專題 動態(tài)規(guī)劃匯總 C++算法:滑動窗口總結(jié) 逆序?qū)Φ亩x如下:對于數(shù)組 nums 的第 i 個和第 j 個元素,如果滿足 0 = i j nums.length 且 nums[i] nums[j],則其為一個逆序?qū)?;否則不是。 給你兩個整數(shù) n 和 k,找出所有包含從 1 到 n 的數(shù)字,且恰好擁有 k 個 逆序?qū)?的不同的數(shù)

    2024年01月17日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包