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

最長連續(xù)不重復子序列(雙指針)

這篇具有很好參考價值的文章主要介紹了最長連續(xù)不重復子序列(雙指針)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、算法描述

含義

  • 雙指針,指的是在遍歷對象的過程中,不是普通的使用單個指針進行訪問,而是使用兩個相同方向(快慢指針)或者相反方向(對撞指針)的指針進行掃描,從而達到相應的目的。

  • 另外還可以根據(jù)序列進行區(qū)分,例如在快排中,雙指針指向的是同一個序列,而歸并排序中兩個指針指向的是兩個不同的序列。

怎么用

  • 沒有必要對概念區(qū)分的很清楚,只需要知道怎么使用即可。

  • 首先想暴力解法,然后在暴力解法的基礎(chǔ)之上,發(fā)現(xiàn)性質(zhì),進行優(yōu)化。

  • 通過題目來理解什么是雙指針吧。

二、題目描述

給定一個長度為 \(n\) 的整數(shù)序列,請找出最長的不包含重復的數(shù)的連續(xù)區(qū)間,輸出它的長度。

輸入格式

第一行包含整數(shù) \(n\)。

第二行包含 \(n\) 個整數(shù)(均在 \(0\) ~ \(10 ^ 5\) 范圍內(nèi)),表示整數(shù)序列。

輸出格式

共一行,包含一個整數(shù),表示最長的不包含重復的數(shù)的連續(xù)區(qū)間的長度。

數(shù)據(jù)范圍

\(1 ≤ n ≤ 10 ^ 5\)

輸入樣例:

5
1 2 2 3 5 

輸出樣例:

3 

三、題目來源

AcWing算法基礎(chǔ)課-799.最長連續(xù)不重復子序列

四、算法思路

  • 首先暴力做法就是,枚舉左端點 \(l\) ,枚舉右端點 \(r\) ,然后枚舉區(qū)間 \([l, r]\) 判斷是否有重復數(shù)字,然后更新答案,顯然該做法時間復雜度會非常高,所以可以優(yōu)化一下。

  • 如何優(yōu)化呢?

  • 遍歷數(shù)組 \(a\) 中的每一個元素 \(a[i]\) , 對于每一個\(i\),找到j使得雙指針 \([j, i]\) 維護的是以 \(a[i]\) 結(jié)尾的最長連續(xù)不重復子序列,長度為 \(i - j + 1\) , 將這一長度與 \(res\) 的較大者更新給\(res\)。

  • 對于每一個 \(i\) ,如何確定j的位置:由于 \([j, i - 1]\) 是前一步得到的最長連續(xù)不重復子序列,所以如果 \([j, i]\) 中有重復元素,一定是 \(a[i]\),因此右移 \(j\)直到 \(a[i]\) 不重復為止(由于 \([j, i - 1]\) 已經(jīng)是前一步的最優(yōu)解,此時 \(j\) 只可能右移以剔除重復元素 \(a[i]\),不可能左移增加元素,因此, \(j\) 具有“單調(diào)性”、本題可用雙指針降低復雜度)。文章來源地址http://www.zghlxwxcb.cn/news/detail-746829.html

五、源代碼

#include <iostream>

using namespace std;

const int N = 100010;

int n;
int a[N], s[N];

int main()
{
    cin >> n;
    
    for (int i = 0; i < n; ++i) cin >> a[i];
    
    int res = 0;
    for (int i = 0, j = 0; i < n; ++i)
    {
        ++ s[a[i]];
        
        while (j <= i && s[a[i]] > 1)
        {
            -- s[a[j]];
             ++ j;
        }
        
        res = max(res, i - j + 1);
    }
    
    cout << res << endl;
    
    return 0;
}

到了這里,關(guān)于最長連續(xù)不重復子序列(雙指針)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【LeetCode動態(tài)規(guī)劃#14】子序列系列題(最長遞增子序列、最長連續(xù)遞增序列、最長重復子數(shù)組、最長公共子序列)

    【LeetCode動態(tài)規(guī)劃#14】子序列系列題(最長遞增子序列、最長連續(xù)遞增序列、最長重復子數(shù)組、最長公共子序列)

    力扣題目鏈接(opens new window) 給你一個整數(shù)數(shù)組 nums ,找到其中最長嚴格遞增子序列的長度。 子序列是由數(shù)組派生而來的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。 示例 1: 輸入:nums = [10,9,2,5,3,7,101,18] 輸出

    2024年02月01日
    瀏覽(30)
  • LeetCode | C++ 動態(tài)規(guī)劃——300.最長遞增子序列、674. 最長連續(xù)遞增序列、718. 最長重復子數(shù)組

    300題目鏈接 dp 數(shù)組定義 dp[i] 表示 i 之前包括 i 的以 nums[i]結(jié)尾 的最長遞增子序列的長度 需要包含nums[i]結(jié)尾,不然在做遞增比較的時候,就沒有意義了。 遞推公式 位置 i 的最長遞增子序列 等于 j 從 0 到 i - 1各個位置的最長遞增子序列 + 1 的 最大值 if (nums[i] nums[j]) dp[i] = ma

    2024年02月16日
    瀏覽(49)
  • 動態(tài)規(guī)劃9:最長遞增子序列、最長連續(xù)遞增序列、最長重復子數(shù)組、最長公共子序列、不相交的線、最長子序和

    動態(tài)規(guī)劃9:最長遞增子序列、最長連續(xù)遞增序列、最長重復子數(shù)組、最長公共子序列、不相交的線、最長子序和

    例題300: 給你一個整數(shù)數(shù)組 nums ,找到其中最長嚴格遞增子序列的長度。 子序列 是由數(shù)組派生而來的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。 確定dp數(shù)組和下標含義 dp[i]表示在第i個元素的最長子序列數(shù)

    2024年04月08日
    瀏覽(29)
  • ( 動態(tài)規(guī)劃) 674. 最長連續(xù)遞增序列 / 718. 最長重復子數(shù)組——【Leetcode每日一題】

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

    難度:簡單 給定一個未經(jīng)排序的整數(shù)數(shù)組,找到最長且 連續(xù)遞增的子序列 ,并返回該序列的長度。 連續(xù)遞增的子序列 可以由兩個下標 l 和 r(l r) 確定,如果對于每個 l = i r ,都有 nums[i] nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是連續(xù)遞增子序列。

    2024年02月05日
    瀏覽(24)
  • 雙指針問題——求只包含兩個元素的最長連續(xù)子序列(子數(shù)組)

    雙指針問題——求只包含兩個元素的最長連續(xù)子序列(子數(shù)組)

    你正在探訪一家農(nóng)場,農(nóng)場從左到右種植了一排果樹。這些樹用一個整數(shù)數(shù)組? fruits ?表示,其中? fruits[i] ?是第? i ?棵樹上的水果? 種類 ?。 你想要盡可能多地收集水果。然而,農(nóng)場的主人設定了一些嚴格的規(guī)矩,你必須按照要求采摘水果: 你只有? 兩個 ?籃子,并且每

    2024年02月02日
    瀏覽(15)
  • Leetcode:300. 最長遞增子序列、674. 最長連續(xù)遞增序列(C++)

    目錄 300.?最長遞增子序列 題目描述: 實現(xiàn)代碼: 原理思路: 674.?最長連續(xù)遞增序列 題目描述: 實現(xiàn)代碼: 原理思路: 題目描述: ????????給你一個整數(shù)數(shù)組? nums ?,找到其中最長嚴格遞增子序列的長度。 子序列? 是由數(shù)組派生而來的序列,刪除(或不刪除)數(shù)組中

    2024年02月11日
    瀏覽(32)
  • LeetCode128.最長連續(xù)序列

    LeetCode128.最長連續(xù)序列

    ?我這個方法有點投機取巧了,題目說時間復雜度最多O(n),而我調(diào)用了Arrays.sort()方法,他的時間復雜度是n*log(n),但是AC了,這樣的話這道題還是非常簡單的,創(chuàng)建一個Hashmap,以nums數(shù)組的元素作為key,以這個元素是連續(xù)序列中的第幾個作為value,先把數(shù)組排一下序,然后從第

    2024年02月12日
    瀏覽(25)
  • 力扣-哈希-最長連續(xù)序列

    給定一個未排序的整數(shù)數(shù)組? nums ?,找出數(shù)字連續(xù)的最長序列(不要求序列元素在原數(shù)組中連續(xù))的長度。 請你設計并實現(xiàn)時間復雜度為? O(n) ?的算法解決此問題。 示例 1: **輸入:**nums = [100,4,200,1,3,2] **輸出:**4 **解釋:**最長數(shù)字連續(xù)序列是 [1, 2, 3, 4]。它的長度為 4。

    2024年02月10日
    瀏覽(20)
  • 【Leetcode】128.最長連續(xù)序列

    給定一個未排序的整數(shù)數(shù)組 nums ,找出數(shù)字連續(xù)的最長序列(不要求序列元素在原數(shù)組中連續(xù))的長度。 請你設計并實現(xiàn)時間復雜度為 O(n) 的算法解決此問題。 示例1: 示例2: 提示 : 0 = nums.length = 10 5 -10 9 = nums[i] = 10 9

    2024年02月10日
    瀏覽(55)
  • 動態(tài)規(guī)劃---最長連續(xù)子序列問題

    最長連續(xù)子序列問題算是動態(tài)規(guī)劃問題中的一個小分支,這里單獨寫一篇文章介紹。至于動態(tài)規(guī)劃基礎(chǔ)問題和詳細的處理步驟我在我的另一篇文章中詳細介紹過。具體解決步驟請移步觀看——動態(tài)規(guī)劃基礎(chǔ)篇。如果想了解01背包問題和滾動數(shù)組相關(guān)內(nèi)容請移步觀看——動態(tài)規(guī)

    2024年02月15日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包