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

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】

這篇具有很好參考價(jià)值的文章主要介紹了【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】

?? 算法題 ??

?? 算法刷題專欄 | 面試必備算法 | 面試高頻算法 ??
?? 越難的東西,越要努力堅(jiān)持,因?yàn)樗哂泻芨叩膬r(jià)值,算法就是這樣?
?? 作者簡介:碩風(fēng)和煒,CSDN-Java領(lǐng)域新星創(chuàng)作者??,保研|國家獎(jiǎng)學(xué)金|高中學(xué)習(xí)JAVA|大學(xué)完善JAVA開發(fā)技術(shù)棧|面試刷題|面經(jīng)八股文|經(jīng)驗(yàn)分享|好用的網(wǎng)站工具分享??????
?? 恭喜你發(fā)現(xiàn)一枚寶藏博主,趕快收入囊中吧??
?? 人生如棋,我愿為卒,行動雖慢,可誰曾見我后退一步?????

?? 算法題 ??

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】

?? 知識回顧

該題和我們之前的題目在求解的思路上相似之處,感興趣的同學(xué)可以學(xué)習(xí)一下相關(guān)的內(nèi)容。

  • 【LeetCode: 1043. 分隔數(shù)組以得到最大和 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp & 區(qū)間dp】

?? 題目鏈接

  • 2369. 檢查數(shù)組是否存在有效劃分

? 題目描述

給你一個(gè)下標(biāo)從 0 開始的整數(shù)數(shù)組 nums ,你必須將數(shù)組劃分為一個(gè)或多個(gè) 連續(xù) 子數(shù)組。

如果獲得的這些子數(shù)組中每個(gè)都能滿足下述條件 之一 ,則可以稱其為數(shù)組的一種 有效 劃分:

子數(shù)組 恰 由 2 個(gè)相等元素組成,例如,子數(shù)組 [2,2] 。
子數(shù)組 恰 由 3 個(gè)相等元素組成,例如,子數(shù)組 [4,4,4] 。
子數(shù)組 恰 由 3 個(gè)連續(xù)遞增元素組成,并且相鄰元素之間的差值為 1 。例如,子數(shù)組 [3,4,5] ,但是子數(shù)組 [1,3,5] 不符合要求。
如果數(shù)組 至少 存在一種有效劃分,返回 true ,否則,返回 false 。

示例 1:

輸入:nums = [4,4,4,5,6]
輸出:true
解釋:數(shù)組可以劃分成子數(shù)組 [4,4] 和 [4,5,6] 。
這是一種有效劃分,所以返回 true 。
示例 2:

輸入:nums = [1,1,1,2]
輸出:false
解釋:該數(shù)組不存在有效劃分。

提示:

2 <= nums.length <= 105
1 <= nums[i] <= 106

?? 求解思路&實(shí)現(xiàn)代碼&運(yùn)行結(jié)果


? 暴力遞歸

?? 求解思路
  1. 想要快速的求解題目,那么讀懂理解題目是必須的環(huán)節(jié),題目給定我們?nèi)N決策方案,看能夠存在一種有效劃分的方案,如果有,返回true,否則,返回false。
  2. 三種決策方案如下:
  • 子數(shù)組 恰 由 2 個(gè)相等元素組成,例如,子數(shù)組 [2,2] 。
  • 子數(shù)組 恰 由 3 個(gè)相等元素組成,例如,子數(shù)組 [4,4,4] 。
  • 子數(shù)組 恰 由 3 個(gè)連續(xù)遞增元素組成,并且相鄰元素之間的差值為 1 。例如,子數(shù)組 [3,4,5] ,但是子數(shù)組 [1,3,5] 不符合要求。
  1. 那我們就設(shè)計(jì)一個(gè)遞歸函數(shù)就可以了,怎么寫呢?直接根據(jù)題目的意思來就OK。
?? 實(shí)現(xiàn)代碼

注意:下面提供倆種不同的代碼實(shí)現(xiàn)方式,大家選擇自己喜歡的就可以,無強(qiáng)制要求。

實(shí)現(xiàn)方式1:
class Solution {
    public boolean validPartition(int[] nums) {
        return process(0,nums);
    }

    public boolean process(int index,int[] nums){
        if(index>=nums.length) return true;
        if(index<=nums.length-2&&nums[index]==nums[index+1]&&process(index+2,nums)){
            return true;
        }
        if(index<=nums.length-3&&nums[index]==nums[index+1]&&nums[index+1]==nums[index+2]&&process(index+3,nums)){
            return true;
        }
        if(index<=nums.length-3&&nums[index]+1==nums[index+1]&&nums[index+1]+1==nums[index+2]&&process(index+3,nums)){
            return true;
        }
        return false;
    }
}
實(shí)現(xiàn)方式2:
class Solution {
    public boolean validPartition(int[] nums) {
        return process(0,nums);
    }

    public boolean process(int index,int[] nums){
        if(index>=nums.length) return true;
        boolean flag=false;
        if(index<=nums.length-2&&nums[index]==nums[index+1]){
            flag|=process(index+2,nums);
        }
        if(index<=nums.length-3&&nums[index]==nums[index+1]&&nums[index+1]==nums[index+2]){
            flag|=process(index+3,nums);
        }
        if(index<=nums.length-3&&nums[index]+1==nums[index+1]&&nums[index+1]+1==nums[index+2]){
            flag|=process(index+3,nums);
        }
        return flag;
    }
}
?? 運(yùn)行結(jié)果

時(shí)間超限了,不要緊哦,我還有錦囊妙計(jì)!

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】


? 記憶化搜索

?? 求解思路
  1. 根據(jù)我們遞歸的分析,在遞歸的過程中會產(chǎn)生重復(fù)的子過程,所以我們想到了加一個(gè)緩存表,也就是我們的記憶化搜索。
?? 實(shí)現(xiàn)代碼
實(shí)現(xiàn)方式1:
class Solution {
    int[] dp;
    public boolean validPartition(int[] nums) {
        int n=nums.length;
        dp=new int[n];
        Arrays.fill(dp,-1);
        return process(0,nums);
    }

    public boolean process(int index,int[] nums){
        if(index>=nums.length) return true;
        if(dp[index]!=-1) return dp[index]==1;
        if(index<=nums.length-2&&nums[index]==nums[index+1]&&process(index+2,nums)){
            dp[index]=1;
            return true;
        }
        if(index<=nums.length-3&&nums[index]==nums[index+1]&&nums[index+1]==nums[index+2]&&process(index+3,nums)){
            dp[index]=1;
            return true;
        }
        if(index<=nums.length-3&&nums[index]+1==nums[index+1]&&nums[index+1]+1==nums[index+2]&&process(index+3,nums)){
            dp[index]=1;
            return true;
        }
        dp[index]=0;
        return false;
    }
}
實(shí)現(xiàn)方式2:
class Solution {
    int[] dp;
    public boolean validPartition(int[] nums) {
        int n=nums.length;
        dp=new int[n];
        Arrays.fill(dp,-1);
        return process(0,nums);
    }

    public boolean process(int index,int[] nums){
        if(index>=nums.length) return true;
        if(dp[index]!=-1) return dp[index]==1;
        boolean flag=false;
        if(index<=nums.length-2&&nums[index]==nums[index+1]){
            flag|=process(index+2,nums);
        }
        if(index<=nums.length-3&&nums[index]==nums[index+1]&&nums[index+1]==nums[index+2]){
            flag|=process(index+3,nums);
        }
        if(index<=nums.length-3&&nums[index]+1==nums[index+1]&&nums[index+1]+1==nums[index+2]){
            flag|=process(index+3,nums);
        }
        dp[index]=flag?1:0;
        return flag;
    }
}
?? 運(yùn)行結(jié)果

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】


? 動態(tài)規(guī)劃

?? 求解思路
  1. 按照我們之前遞歸和記憶化搜索的思路,通過動態(tài)規(guī)劃實(shí)現(xiàn)出來。
?? 實(shí)現(xiàn)代碼

注意:代碼可以繼續(xù)優(yōu)化,可以省去一些沒有用的,或者將所有的條件都放到一個(gè)邏輯判斷中,這些點(diǎn)也很重要,但是我們更加關(guān)注的是狀態(tài)的轉(zhuǎn)移。

class Solution {
    boolean[] dp;
    public boolean validPartition(int[] nums) {
        int n=nums.length;
        dp=new boolean[n+1];
        dp[n]=true;
        for(int index=n-1;index>=0;index--){
            boolean flag=false;
            if(index<=n-2&&nums[index]==nums[index+1]){
                flag|=dp[index+2];
            }
            if(index<=n-3&&nums[index]==nums[index+1]&&nums[index+1]==nums[index+2]){
                flag|=dp[index+3];
            }
            if(index<=n-3&&nums[index]+1==nums[index+1]&&nums[index+1]+1==nums[index+2]){
                flag|=dp[index+3];
            }
            dp[index]=flag;
        }
        return dp[0];
    }
}
?? 運(yùn)行結(jié)果

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】


?? 共勉

最后,我想和大家分享一句一直激勵(lì)我的座右銘,希望可以與大家共勉!

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】

【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】文章來源地址http://www.zghlxwxcb.cn/news/detail-418532.html

到了這里,關(guān)于【LeetCode: 2369. 檢查數(shù)組是否存在有效劃分 | 暴力遞歸=>記憶化搜索=>動態(tài)規(guī)劃 | 線性dp】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 檢查 Bash 中是否存在輸入?yún)?shù)

    當(dāng)我們創(chuàng)建 Bash 腳本時(shí),我們可能希望在我們的腳本中使用參數(shù)來成功運(yùn)行。 因此,我們需要?jiǎng)?chuàng)建一個(gè)腳本來檢查用戶在腳本中使用的輸入?yún)?shù)的數(shù)量。 當(dāng)用戶在使用腳本或命令時(shí)沒有傳遞所需參數(shù)時(shí),所有這些都可以防止意外行為,然后我們可以傳遞一條錯(cuò)誤消息,告訴

    2024年02月08日
    瀏覽(18)
  • 如何檢查 Docker 鏡像是否存在漏洞

    如何檢查 Docker 鏡像是否存在漏洞

    今天我們來聊聊Docker鏡像。 你可能聽過Docker,但是你知道什么是Docker鏡像嗎? 如果你還不知道,別擔(dān)心,今天我們用幽默的方式來解釋一下 首先,Docker鏡像就像一份披薩的食譜。你可以把它看作是一個(gè)包含了所有制作披薩所需的材料和步驟的清單。 類似地,Docker鏡像包含了

    2023年04月24日
    瀏覽(18)
  • Hadoop中命令檢查hdfs的文件是否存在

    在Hadoop中,可以使用以下命令檢查HDFS文件是否存在: hadoop fs -test -e 其中,是要檢查的HDFS文件的路徑。 如果文件存在,命令返回0;如果文件不存在,命令返回非0值。 以下是一個(gè)示例: 示例中,使用hadoop fs -test -e命令檢查/user/hadoop/myfile.txt文件是否存在。接著,通過檢查命

    2024年02月14日
    瀏覽(88)
  • 如何在十億級別用戶中檢查用戶名是否存在?

    如何在十億級別用戶中檢查用戶名是否存在?

    不知道大家有沒有留意過,在使用一些app注冊的時(shí)候,提示你用戶名已經(jīng)被占用了,需要更換一個(gè),這是如何實(shí)現(xiàn)的呢?你可能想這不是很簡單嗎,去數(shù)據(jù)庫里查一下有沒有不就行了嗎,那么假如用戶數(shù)量很多,達(dá)到數(shù)億級別呢,這又該如何是好? 數(shù)據(jù)庫方案 第一種方案就

    2024年02月08日
    瀏覽(26)
  • 【教3妹學(xué)編程-算法題】檢查按位或是否存在尾隨零

    【教3妹學(xué)編程-算法題】檢查按位或是否存在尾隨零

    3妹 :嗚嗚,煩死了, 臉上長了一個(gè)痘 2哥 : 不要在意這些細(xì)節(jié)嘛,不用管它,過兩天自然不就好了。 3妹 :切,你不懂,影響這兩天的心情哇。 2哥 : 我看你是不急著找工作了啊, 工作那么辛苦,哪還有時(shí)間想這些啊。 3妹 :說到找工作,我又要去刷題了。 2哥 :我給你出

    2024年01月20日
    瀏覽(21)
  • R語言【cli】——ansi_nzchar():檢查是否存在ANSI語句

    Package? cli ?version 3.6.0 參數(shù)【x】 :Charcater向量。其他對象使用base::as.character()進(jìn)行轉(zhuǎn)換。 參數(shù)【...】 :傳入base::nzchar()。

    2024年01月21日
    瀏覽(27)
  • 【100個(gè) Unity實(shí)用技能】?? | C# 檢查字典中是否存在某個(gè)Key的幾種方法

    【100個(gè) Unity實(shí)用技能】?? | C# 檢查字典中是否存在某個(gè)Key的幾種方法

    老規(guī)矩,先介紹一下 Unity 的科普小知識: Unity 是 實(shí)時(shí)3D互動內(nèi)容創(chuàng)作和運(yùn)營平臺 。 包括 游戲開發(fā) 、 美術(shù) 、 建筑 、 汽車設(shè)計(jì) 、 影視 在內(nèi)的所有創(chuàng)作者,借助 Unity 將創(chuàng)意變成現(xiàn)實(shí)。 Unity 平臺提供一整套完善的軟件解決方案,可用于創(chuàng)作、運(yùn)營和變現(xiàn)任何實(shí)時(shí)互動的2D和

    2023年04月08日
    瀏覽(25)
  • R語言【cli】——ansi_has_any():檢查字符串里是否存在ANSI格式

    Package? cli ?version 3.6.0 參數(shù)【string】 :要檢查的字符串。它也可以是字符向量 參數(shù)【sgr】 :是否查找SGR(樣式化)控制序列。 參數(shù)【csi】 :是否查找非sgr控制序列。 參數(shù)【link】 :是否查找ANSI超鏈接。 邏輯向量,對于具有某種ANSI樣式的字符串為TRUE。

    2024年01月20日
    瀏覽(28)
  • [ 云計(jì)算 | AWS 實(shí)踐 ] 使用 Java 檢查指定的密鑰是否存在于給定的 Amazon S3 存儲桶中

    [ 云計(jì)算 | AWS 實(shí)踐 ] 使用 Java 檢查指定的密鑰是否存在于給定的 Amazon S3 存儲桶中

    本文收錄于【#云計(jì)算入門與實(shí)踐 - AWS】專欄中,收錄 AWS 入門與實(shí)踐相關(guān)博文。 本文同步于個(gè)人公眾號:【 云計(jì)算洞察 】 更多關(guān)于云計(jì)算技術(shù)內(nèi)容敬請關(guān)注:CSDN【#云計(jì)算入門與實(shí)踐 - AWS】專欄。 本系列已更新博文: [ 云計(jì)算 | AWS 實(shí)踐 ] Java 應(yīng)用中使用 Amazon S3 進(jìn)行存儲桶

    2024年02月05日
    瀏覽(54)
  • 華為OD機(jī)試真題B卷 Java 實(shí)現(xiàn)【檢查是否存在滿足條件的數(shù)字組合】,附詳細(xì)解題思路

    給定一個(gè)正整數(shù)數(shù)組,檢查數(shù)組中是否存在滿足規(guī)則的數(shù)字組合 規(guī)則:A = B + 2C 第一行輸出數(shù)組的元素個(gè)數(shù)。 接下來一行輸出所有數(shù)組元素,用空格隔開。 如果存在滿足要求的數(shù),在同一行里依次輸出規(guī)則里A/B/C的取值,用空格隔開。 如果不存在,輸出0。 讀取輸入的數(shù)組元

    2024年02月07日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包