演算法基礎課 雙指標演算法

2021-10-07 14:33:25 字數 985 閱讀 4738

首先對於雙指標演算法,必須明確,對於此問題來說,只能是乙個優化問題,核心思想是把乙個o(n2)的時間複雜度問題給優化到o(n)來解決。

通用模板:

按照樸素演算法:

for(

int i=

0;i)for

(int j=

0;j)按照某種性質進行優化:

for(

int i-

0,j=

0;i)while

(jcheck

(i,j)

(某種屬性))

雙指標通常與滑窗來共同使用,先來介紹什麼是滑窗:

滑窗通常來說就是left與right來構成乙個視窗對於left我們通常用做收縮視窗,對於right通常使用擴充套件視窗。然後滿足擴充套件條件就可以向右擴充套件,然後要是視窗發生溢位(條件達到)則可以使左指標向右移動。

具體題目舉例:

給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。

輸入格式

第一行包含整數n。

第二行包含n個整數(均在0~100000範圍內),表示整數序列。

輸出格式

共一行,包含乙個整數,表示最長的不包含重複數字的連續子串行的長度。

分析:常常利用單調性來解決此類問題:

首先設乙個i,j,其中i是正常從前向後列舉,然後對於j來說應該是i,j之間的最大距離(不重複)所以可以得到,對於每次i往後移動,看看j是否移動,然後再更新答案。

**:

#include

#include

using

namespace std;

const

int max1=

100010

;int a[max1]

;int s[max1]

;int

main()

res=

max(res,i-j+1)

;```

演算法基礎課筆記

方法步驟 1 確定分界點。一般取q l q r q l r 2 作為樞紐。2 調整區間,左邊的都是小於等於樞紐值,右邊的都是大於等於樞紐值。最重要 3 遞迴處理左右兩段。快速排序模板 void quick sort int q int l int r quick sort q,l,j quick s...

演算法基礎課 高精度

j高精度演算法 常用的有加減,對於乘除我們只會用小數乘大數。首先對於高精度加法,應該使用string類來進行表示,然後對於此類問題還需要特別注意的就是對於乙個大數來說,我們應該進行倒置,這樣對於加減來說更為有利。對於高精度加法模板如下 應該先設定乙個t 0 然後分別加上每乙個數的對應位即可解決問題。...

基礎演算法 雙指標演算法

1.核心思想 通過某種線性關係將原先o n2 的樸素演算法優化為o n 的快速演算法 2.一般應用思路 1 先寫乙個暴力的樸素o n2 的演算法 2 找到兩個指標之間的單調關係 3 如果有單調關係,可以將列舉從o n2 優化到o n 3.模板 for int i 0,j 0 i n i 常見問題的分...