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

【LeetCode】446. 等差數(shù)列劃分II -- 子序列

這篇具有很好參考價值的文章主要介紹了【LeetCode】446. 等差數(shù)列劃分II -- 子序列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目鏈接

1. 思路講解

我們要知道以某個位置為結(jié)尾的子序列的數(shù)量,可以通過它的以上一位置的為結(jié)尾的子序列的數(shù)量得知,也就是說,這是一個dp問題。

1.1 dp表的創(chuàng)建

dp問題我們需要創(chuàng)建dp表,如果我們單純使用dp[i]來表示以 i 位置為結(jié)尾的子序列的數(shù)量是完全不夠的。因為我們不知道以 i-1 位置為結(jié)尾的等差數(shù)列是怎樣的,它的公差是幾我們是不知道的。也就是說,我們不確定 i 位置的元素是否能跟到以 i - 1 位置為結(jié)尾的數(shù)列的后面。

但是,如果知道了數(shù)列的后兩個元素,也就是知道了 i - 1 位置以及數(shù)列中上一個位置的元素,就能知道數(shù)列的公差了,也就能知道 i 位置的元素是否能跟到后面了,所以我們需要用兩個元素來表示每個dp位置。

創(chuàng)建二維dp表,dp[i][j]表示以 i 位置的元素為數(shù)列倒數(shù)第二個元素,以 j 位置的元素為數(shù)列倒數(shù)第一個元素,為結(jié)尾的數(shù)列數(shù)量有多少。(我們?nèi)藶橐?guī)定i < j)

1.2 狀態(tài)轉(zhuǎn)移方程

nums[j] - nums[i]可以得到公差,再由 num[i] - 公差 可以得到上一項的值,記為 a,我們需要知道這個 a 值在nums中是否存在且是否在 i 位置的前面,兩個條件都滿足才符合題意。

記 a 在nums中的下標為k(至于怎么找到這個k下面會說),我們要找到以 i 和 j 位置為結(jié)尾的等差數(shù)列的個數(shù),其實找到所有 k 和 i 位置元素結(jié)尾的等差數(shù)列的個數(shù)相加即可(a元素在nums中的位置不只一個,那么k可能就不只一個)。并且也需額外加上一個數(shù)列,就是 k,i ,j,本身所構(gòu)成的等差數(shù)列。

那么狀態(tài)轉(zhuǎn)移方程就為:dp[i][j] += dp[k][i] + 1

1.3 使用哈希表找到k

我們寫代碼的時候,遍歷所有 i 和 j 的組合,時間復(fù)雜度就已經(jīng)到達 N^2 了,如果此時再在數(shù)組中去尋找 k ,那么時間復(fù)雜度就 N^3了,這大概率是會超時的。

我們可以在dp之前,使用哈希表去將<所有元素,數(shù)組下標>綁定在一起,放在哈希表中,這樣我們得到了 a 之后,就可以使用哈希表很快地查找到 k 了。

1.4 初始化

剛開始,以 i,j 位置為結(jié)尾,只有兩個元素,不符合題目中的等差數(shù)列,可以記為 0 ,所以我們初始化的時候?qū)p表中所有的值初始化為 0 即可。又因為,vector會默認初始化為0,所以我們不用手動初始化了。

1.5 返回值

我們要求的是所有的等差數(shù)列,所以我們要將所有符合題意的dp[i][j]都加起來然后返回。

1.6 該題坑爹的一點

雖然題目已經(jīng)說了,返回值以及各個元素的值都在int范圍內(nèi),但是我們求a的時候,a的值可能會超出int的范圍從而出錯,所以我們將a的類型要設(shè)置為long long。然后用a查找k用的是hash,所以hash的第一個類型也要為long long。

2. 代碼編寫

【LeetCode】446. 等差數(shù)列劃分II -- 子序列,題,leetcode,算法,職場和發(fā)展文章來源地址http://www.zghlxwxcb.cn/news/detail-622428.html

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        // 創(chuàng)建哈希表,便于很快地找到k
        // 因為k不只一個,所以用vector來存儲
        unordered_map<long long, vector<int>> hash;
        for (int i = 0; i < n; i++) hash[nums[i]].push_back(i);

        // 創(chuàng)建二維dp表,第一維為數(shù)列的倒數(shù)第二個元素,第二維為數(shù)列的倒數(shù)第一個元素
        vector<vector<int>> dp(n, vector<int>(n));
        
        int ret = 0; // 所有數(shù)組的數(shù)量

        // i為nums第0個位置時,不管j為幾,dp[0][j]都為0,因為只有兩個元素
        // 所以從第1個位置開始填表即可,且i一定不為nums最后一個元素
        for (int i = 1; i < n - 1; ++i)
        {
            // j從i+1開始,一直到最后一個位置,尋找符合題意的情況
            for (int j = i + 1; j < n; ++j)
            {
                long long a = (long long)2*nums[i] - nums[j];
                if (hash.count(a)) // 看a是否存在于hash中
                {
                    // 如果存在,遍歷a對應(yīng)的vector
                    for (auto k : hash[a])
                    {
                        // k需要小于i
                        if (k < i) dp[i][j] += dp[k][i] + 1;
                    }
                } 
                ret += dp[i][j];
            }
        }
        return ret;
    }
};

到了這里,關(guān)于【LeetCode】446. 等差數(shù)列劃分II -- 子序列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【C語言藍橋杯每日一題】——等差數(shù)列

    【C語言藍橋杯每日一題】——等差數(shù)列

    ? ? ??博客昵稱:博客小夢 ??最喜歡的座右銘:全神貫注的上吧?。?! ??作者簡介:一名熱愛C/C++,算法等技術(shù)、喜愛運動、熱愛K歌、敢于追夢的小博主! ??博主小留言:哈嘍! ??各位CSDN的uu們,我是你的博客好友小夢,希望我的文章可以給您帶來一定的幫助,話不

    2023年04月09日
    瀏覽(29)
  • 華為OD機試真題 Java 實現(xiàn)【等差數(shù)列】【2023 B卷 100分】,附詳細解題思路

    華為OD機試真題 Java 實現(xiàn)【等差數(shù)列】【2023 B卷 100分】,附詳細解題思路

    本專欄收錄于《華為OD機試(JAVA)真題(A卷+B卷)》。 刷的越多,抽中的概率越大 ,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測試,訂閱后,專欄內(nèi)的文章都可看,可加入華為OD刷題群(私信即可),發(fā)現(xiàn)新題目,隨時更新,全天CSDN在線答疑。 專欄福利 :限時訂

    2024年02月16日
    瀏覽(29)
  • 藍橋杯專題-真題版含答案-【九宮幻方】【打魚還是曬網(wǎng)】【階乘尾數(shù)零的個數(shù)】【等差素數(shù)列】

    藍橋杯專題-真題版含答案-【九宮幻方】【打魚還是曬網(wǎng)】【階乘尾數(shù)零的個數(shù)】【等差素數(shù)列】

    點擊跳轉(zhuǎn)專欄=Unity3D特效百例 點擊跳轉(zhuǎn)專欄=案例項目實戰(zhàn)源碼 點擊跳轉(zhuǎn)專欄=游戲腳本-輔助自動化 點擊跳轉(zhuǎn)專欄=Android控件全解手冊 點擊跳轉(zhuǎn)專欄=Scratch編程案例 點擊跳轉(zhuǎn)=軟考全系列 點擊跳轉(zhuǎn)=藍橋系列 專注于 Android/Unity 和各種游戲開發(fā)技巧,以及 各種資源分享 (網(wǎng)站、

    2024年02月15日
    瀏覽(21)
  • Leetcode38. 外觀數(shù)列

    Leetcode38. 外觀數(shù)列

    給定一個正整數(shù) n ,輸出外觀數(shù)列的第 n 項。 「外觀數(shù)列」是一個整數(shù)序列,從數(shù)字 1 開始,序列中的每一項都是對前一項的描述。 你可以將其視作是由遞歸公式定義的數(shù)字字符串序列: countAndSay(1) = “1” countAndSay(n) 是對 countAndSay(n-1) 的描述,然后轉(zhuǎn)換成另一個數(shù)字字符串

    2023年04月26日
    瀏覽(19)
  • LeetCode 38 外觀數(shù)列

    LeetCode 38 外觀數(shù)列

    外觀數(shù)列 給定一個正整數(shù) n ,輸出外觀數(shù)列的第 n 項。 「外觀數(shù)列」是一個整數(shù)序列,從數(shù)字 1 開始,序列中的每一項都是對前一項的描述。 你可以將其視作是由遞歸公式定義的數(shù)字字符串序列: countAndSay(1) = \\\"1\\\" countAndSay(n) 是對 countAndSay(n-1) 的描述,然后轉(zhuǎn)換成另一個數(shù)字

    2024年02月02日
    瀏覽(23)
  • LeetCode 38. 外觀數(shù)列

    給定一個正整數(shù) n ,輸出外觀數(shù)列的第 n 項。 「外觀數(shù)列」是一個整數(shù)序列,從數(shù)字 1 開始,序列中的每一項都是對前一項的描述。 你可以將其視作是由遞歸公式定義的數(shù)字字符串序列: countAndSay(1) = “1” countAndSay(n) 是對 countAndSay(n-1) 的描述,然后轉(zhuǎn)換成另一個數(shù)字字符串

    2024年01月18日
    瀏覽(16)
  • LeetCode 面試題 16.17. 連續(xù)數(shù)列

    LeetCode 面試題 16.17. 連續(xù)數(shù)列

    ??給定一個整數(shù)數(shù)組,找出總和最大的連續(xù)數(shù)列,并返回總和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。 進階: 如果你已經(jīng)實現(xiàn)復(fù)雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。 ??點擊此處跳轉(zhuǎn)題目。 ??使用動態(tài)

    2024年02月05日
    瀏覽(17)
  • LeetCode刷題---斐波那契數(shù)列模型

    LeetCode刷題---斐波那契數(shù)列模型

    顧得泉: 個人主頁 個人專欄: 《Linux操作系統(tǒng)》??《C/C++》??《LeedCode刷題》 鍵盤敲爛,年薪百萬! 題目鏈接:1137. 第 N 個泰波那契數(shù)?? 泰波那契序列Tn定義如下: ????????T0=0,T1=1,T2= 1,且在n=0的條件下Tn+3= Tn+Tn+1t+Tn+2 ????????給你整數(shù)n,請返回第n個泰波那契數(shù)Tn的值

    2024年02月04日
    瀏覽(26)
  • Golang | Leetcode Golang題解之第38題外觀數(shù)列

    Golang | Leetcode Golang題解之第38題外觀數(shù)列

    題目: 題解:

    2024年04月25日
    瀏覽(31)
  • 代碼隨想錄 Leetcode763. 劃分字母區(qū)間

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包