【題目來自灰灰考研】
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...