資料結構 連續相同元素為固定值的最長子串長度

2021-08-21 23:52:54 字數 1149 閱讀 7542

【題目來自灰灰考研】

2016清華大學912

求乙個陣列a中連續相同數字的和等於s的最長子陣列長度.

例如a=, s=3.則所求子陣列長度為 3

要求演算法時間複雜度不超過 o(n),空間複雜度不超過 o(1) .

a) 描述演算法思想 

b) 偽**實現 

c) 計算程式的演算法複雜度。 

迴圈遍歷陣列,每當遇到乙個數字時,做如下判斷

如果當前數字不能被目標值整除,那麼他肯定不能組合成目標值,直接pass掉,下一輪迴圈

如果當前數字可以被目標值整除,那麼算出商,也就是如果用當前數字構成目標值的話需要多少個

判斷這個值當前位置和所需要位數的和與陣列長度的大小關係:比如說當前數字為2在陣列的最後乙個位置,目標值為8,如果我想用2構成8那麼還需要3個,但是我已經是陣列最後乙個了,後面不可能有了,這種情況也要pass掉

如果這個位置和需要的位數也符合要求,那麼就是要判斷這麼多位數是不是連續著都是當前值,比如當前為2,目標為8,那麼後面的3個數字也都要是2

如果滿足上述要求,那麼這個數字可以構成目標值,接下來就是更新最優解了

#include#include#includeusing namespace std;

int getlongsubarraylength(int data, int n, int target)

} // 如果上述迴圈執行完畢,那麼就是滿足條件了

if(j == i + num)

// 更新最長長度

if(num > length)

length = num;

} return length;

}int main()

; // int data = ;

// int data = ;

int result = getlongsubarraylength(data, 1, 1);

cout<<"the result is :"<test1:

a= s=3結果 3

test2:

a= s=6結果 0

test3:

a= s=1結果 1

找出和為固定值的兩個數字

在由n個正整數的集合s中,找出最大元素m,滿足m a b,其中a,b都是集合s中元素 思路1 首先對集合s排序,時間複雜度nlogn,然後對排序後的集合做hash,空間複雜度n,m從s中的最大值開始遍歷,再內層遍歷集合中的每個數x,到hash表裡檢測m x是否在集合中 思路2 先對集合排序,時間複雜...

演算法六 找到兩數之和為固定值的下標

題目 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。方法一 class solution def twosum self,nums,target n len n...

資料結構 刪除鍊錶相同元素

灰灰考研 2017華科計院 假設帶頭結點的單鏈表a,b為有序遞增表,單鏈表的型別定義如下 typeddf struct lnode lnode,linklist 編寫演算法voiddelete linklist a,linklist b 從有序表 a 中刪除所有和有序表 b 中元素相同的結點。inc...