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

( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復(fù)子數(shù)組——【Leetcode每日一題】

這篇具有很好參考價值的文章主要介紹了( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復(fù)子數(shù)組——【Leetcode每日一題】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

題目一(貪心)

?674. 最長連續(xù)遞增序列

難度:簡單

給定一個未經(jīng)排序的整數(shù)數(shù)組,找到最長且 連續(xù)遞增的子序列,并返回該序列的長度。

連續(xù)遞增的子序列 可以由兩個下標(biāo) lr(l < r)確定,如果對于每個 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是連續(xù)遞增子序列。

示例 1:

輸入:nums = [1,3,5,4,7]
輸出:3
解釋:最長連續(xù)遞增序列是 [1,3,5], 長度為3。
盡管 [1,3,5,7] 也是升序的子序列, 但它不是連續(xù)的,因為 5 和 7 在原數(shù)組里被 4 隔開。

示例 2:

輸入:nums = [2,2,2,2,2]
輸出:1
解釋:最長連續(xù)遞增序列是 [2], 長度為1。

提示:

  • 1 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
  • ? 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^9 <= nums[i] <= 10^9 ?109<=nums[i]<=109

??思路:貪心

這道題目可以用貪心來做:

  • 遇到 nums[i] > nums[i - 1] 的情況,count++,
  • 否則count1,使用ans保存count最大值。

??代碼:(Java、C++)

Java

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int ans = 1, count = 1;;
        for(int i = 1; i < nums.length; i++){
            if(nums[i] > nums[i - 1]) count++;
            else{
                ans = Math.max(ans, count);
                count = 1;
            }
        }
        ans = Math.max(ans, count);
        return ans;
    }
}

C++

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        int ans = 1, count = 1;;
        for(int i = 1; i < nums.size(); i++){
            if(nums[i] > nums[i - 1]) count++;
            else{
                ans = max(ans, count);
                count = 1;
            }
        }
        ans = max(ans, count);
        return ans;
    }
};
?? 運(yùn)行結(jié)果:

( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復(fù)子數(shù)組——【Leetcode每日一題】

?? 復(fù)雜度分析:
  • 時間復(fù)雜度 O ( n ) O(n) O(n),其中 n 為數(shù)組nums的長度,要遍歷數(shù)組一次。
  • 空間復(fù)雜度 O ( 1 ) O(1) O(1),額外使用的空間為常數(shù)。

題目來源:力扣。

題目二(背包問題)

?718. 最長重復(fù)子數(shù)組

難度:中等

給兩個整數(shù)數(shù)組 nums1nums2 ,返回 兩個數(shù)組中 公共的 、長度最長的子數(shù)組的長度 。

示例 1:

輸入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
輸出:3
解釋:長度最長的公共子數(shù)組是 [3,2,1] 。

示例 2:

輸入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
輸出:5

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 100

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

背包問題必知內(nèi)容:一篇文章吃透背包問題?。?!

類似 0-1背包,我們可以設(shè)置一個二維dp數(shù)組,dp[i][j] 表示nums1的前i個數(shù)字 和 nums2的前j個數(shù)字 的最長重復(fù)子數(shù)組長度:

  • 如果nums1[i] == nums2[j]則此時的最長長度等于左上角的長度加1 ,即狀態(tài)轉(zhuǎn)移公式為:
    d p [ i ] [ j ] = d p [ i ? 1 ] [ j ? 1 ] + 1 dp[i][j] = dp[i-1][j-1] + 1 dp[i][j]=dp[i?1][j?1]+1
  • 如果不相等,dp[i][j] = 0

( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復(fù)子數(shù)組——【Leetcode每日一題】

?? 空間優(yōu)化:

  • 由上面的 狀態(tài)轉(zhuǎn)移公式 發(fā)現(xiàn),dp[i][j] 只與 dp[i-1][j-1]有關(guān),所以可以只使用一維 dp 數(shù)組即可,即狀態(tài)轉(zhuǎn)移公式 可變?yōu)椋?br> d p [ j ] = 1 + d p [ j ? 1 ] dp[j] = 1 + dp[j - 1] dp[j]=1+dp[j?1]
  • 又因為 dp[j] 使用的是變化前的dp[j-1],所以在程序?qū)崿F(xiàn)時需要按 倒序 來循環(huán)求解。

??代碼:(Java、C++)

Java

class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        int[] dp = new int[nums2.length + 1];//dp[i]數(shù)組存儲
        int ans = 0;
        for(int i = 0; i < nums1.length; i++){
            for(int j = nums2.length - 1; j >= 0; j--){
                if(nums1[i] == nums2[j]){
                    dp[j + 1] = 1 + dp[j];
                    ans = Math.max(ans, dp[j + 1]);
                } 
                else dp[j + 1] = 0;
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<int> dp(nums2.size() + 1);//dp[i]數(shù)組存儲
        int ans = 0;
        for(int i = 0; i < nums1.size(); i++){
            for(int j = nums2.size() - 1; j >= 0; j--){
                if(nums1[i] == nums2[j]){
                    dp[j + 1] = 1 + dp[j];
                    ans = max(ans, dp[j + 1]);
                } 
                else dp[j + 1] = 0;
            }
        }
        return ans;
    }
};
?? 運(yùn)行結(jié)果:

( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復(fù)子數(shù)組——【Leetcode每日一題】

?? 復(fù)雜度分析:
  • 時間復(fù)雜度 O ( n ? m ) O(n*m) O(n?m),其中 n 為數(shù)組nums1的長度,m 為數(shù)組nums2的長度。
  • 空間復(fù)雜度 O ( m ) O(m) O(m)。

題目來源:力扣。

放棄一件事很容易,每天能堅持一件事一定很酷,一起每日一題吧!
關(guān)注我LeetCode主頁 / CSDN —— 力扣專欄,每日更新!文章來源地址http://www.zghlxwxcb.cn/news/detail-453828.html

注: 如有不足,歡迎指正!

到了這里,關(guān)于( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復(fù)子數(shù)組——【Leetcode每日一題】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(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ī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • 【Leecode】674. 最長連續(xù)遞增序列

    【Leecode】674. 最長連續(xù)遞增序列

    Given an unsorted array of integers nums , return the length of the longest continuous increasing subsequence (i.e. subarray). The subsequence must be strictly increasing. A continuous increasing subsequence is defined by two indices l and r (l r) such that it is [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] and for each l = i r , nums[i] nums[i + 1] . E

    2024年02月07日
    瀏覽(24)
  • day55 最長遞增子序列 最長連續(xù)遞增子序列 最長重復(fù)子數(shù)組

    day55 最長遞增子序列 最長連續(xù)遞增子序列 最長重復(fù)子數(shù)組

    題目鏈接?300 最長遞增子序列 題意 找到整數(shù)數(shù)組nums的最長嚴(yán)格遞增子序列的長度(子序列并不改變原始的順序,但是可以刪除元素) 動態(tài)規(guī)劃 動規(guī)五部曲 1)dp數(shù)組及下標(biāo)i的含義 dp[i] 表示以nums[i]為結(jié)尾的最長遞增子序列的長度 2)dp數(shù)組初始化 根據(jù)定義 長度至少是1? dp

    2024年04月11日
    瀏覽(26)
  • 算法刷題Day 52 最長遞增子序列+最長連續(xù)遞增子序列+最長重復(fù)子數(shù)組

    我自己想出來的方法,時間復(fù)雜度應(yīng)該是 O(n2) 滑動窗口 連續(xù)的話,可以考慮用滑動窗口 動態(tài)規(guī)劃 貪心算法

    2024年02月14日
    瀏覽(48)
  • 動態(tài)規(guī)劃算法 | 最長遞增子序列

    動態(tài)規(guī)劃算法 | 最長遞增子序列

    通過查閱相關(guān)資料 發(fā)現(xiàn)動態(tài)規(guī)劃問題一般就是求解最值問題 。這種方法在解決一些問題時應(yīng)用比較多,比如求最長遞增子序列等。 有部分人認(rèn)為動態(tài)規(guī)劃的核心就是:窮舉。因為要求最值,肯定要把所有可行的答案窮舉出來,然后在其中找最值。 首先,筆者認(rèn)為動態(tài)規(guī)劃中

    2024年02月06日
    瀏覽(30)
  • 動態(tài)規(guī)劃之最長遞增子序列

    leetcode 300 最長遞增子序列 1.定義dp數(shù)組:dp[i]表示以nums[i]結(jié)尾的最長遞增子序列的長度。 2.定義遞推公式 dp[i] = max(dp[j] + 1, dp[i]) 因為dp[j] + 1中的dp[j]并非是在前一個已經(jīng)加1的dp[j]的基礎(chǔ)之上再加上1。若從初始狀態(tài)加1,而dp[i]永遠(yuǎn)保持的是最大的狀態(tài),則dp[j] + 1肯定要小一些。

    2024年01月23日
    瀏覽(40)
  • 【動態(tài)規(guī)劃】求最長遞增子序列問題

    【動態(tài)規(guī)劃】求最長遞增子序列問題

    最長遞增子序列(Longest Increasing Subsequence, LIS ) 子序列:對于任意序列s,它的子序列是通過刪除其中零個或多個元素得到的另?個序列 注:剩余元素的相對順序保持不變 給定n個整數(shù)組成的序列 s [ 1... n ] s[1...n] s [ 1... n ] ,求最長遞增子序列LIS(的長度) 8 3 6 1 3 5 4 7 假設(shè)

    2024年02月03日
    瀏覽(27)
  • 力扣--動態(tài)規(guī)劃300.最長遞增子序列

    力扣--動態(tài)規(guī)劃300.最長遞增子序列

    一開始想到的方法非常低效,但好理解。 ? 思路分析: 使用二維數(shù)組 dp 來記錄遞增子序列的長度信息,其中 dp[i][0] 表示以 nums[i] 結(jié)尾的最長遞增子序列的長度, dp[i][1] 表示包含 nums[i] 的最長遞增子序列的長度。 初始化 dp 數(shù)組,將以第一個元素結(jié)尾的遞增子序列長度置為

    2024年01月24日
    瀏覽(26)
  • 【學(xué)會動態(tài)規(guī)劃】最長遞增子序列的個數(shù)(28)

    【學(xué)會動態(tài)規(guī)劃】最長遞增子序列的個數(shù)(28)

    目錄 動態(tài)規(guī)劃怎么學(xué)? 1. 題目解析 2. 算法原理 1. 狀態(tài)表示 2. 狀態(tài)轉(zhuǎn)移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 學(xué)習(xí)一個算法沒有捷徑,更何況是學(xué)習(xí)動態(tài)規(guī)劃, 跟我一起刷動態(tài)規(guī)劃算法題,一起學(xué)會動態(tài)規(guī)劃! 這道題的題目非常好理解,就是求出最長

    2024年02月11日
    瀏覽(26)
  • 【LeetCode: 673. 最長遞增子序列的個數(shù) | 動態(tài)規(guī)劃】

    【LeetCode: 673. 最長遞增子序列的個數(shù) | 動態(tài)規(guī)劃】

    ?? 算法題 ?? ?? 算法刷題專欄 | 面試必備算法 | 面試高頻算法 ?? ?? 越難的東西,越要努力堅持,因為它具有很高的價值,算法就是這樣? ?? 作者簡介:碩風(fēng)和煒,CSDN-Java領(lǐng)域新星創(chuàng)作者??,保研|國家獎學(xué)金|高中學(xué)習(xí)JAVA|大學(xué)完善JAVA開發(fā)技術(shù)棧|面試刷題|面經(jīng)八股文

    2024年02月03日
    瀏覽(22)
  • leetcode300. 最長遞增子序列(動態(tài)規(guī)劃-java)

    leetcode300. 最長遞增子序列(動態(tài)規(guī)劃-java)

    來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/longest-increasing-subsequence 給你一個整數(shù)數(shù)組 nums ,找到其中最長嚴(yán)格遞增子序列的長度。 子序列 是由數(shù)組派生而來的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序

    2024年02月15日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包