lintcode 最短重複子陣列

2021-09-11 06:36:00 字數 650 閱讀 8037

給定乙個陣列,返回具有重複元素的最短子陣列長度。

如果陣列沒有具有重複元素的子陣列,則返回 -1。

0 <= arr.length <= 10^6

樣例 1:

輸入:[1,2,3,1,4,5,4,6,8]

輸出:3

解釋:具有重複元素的最短子陣列是 [4,5,4]。

樣例 2:

輸入:[1,1]

輸出:2

解釋:具有重複元素的最短子陣列是 [1,1]。

使用乙個map 記錄一下每個元素和他所在的位置,如果更新時發現位置不是0,那麼就可以計算出乙個出現重複的長度,保留下最小的即可。這裡要注意的問題就是位置可能出現0的情況。比如 arr = ,m[arr[0]] = 0,所以我這裡設定位置的時候從1開始設定的。

這個演算法的複雜度是o(n^2),因為map在更新查詢的時候也有一次迭代,所以還是有點瑕疵的,並且如果重複元素的情況下,將會更加浪費時間,所以又寫了乙個函式來判斷是否存在重複元素,複雜度為o(n)。

class solution 

return false;

}int getlength(vector&arr)

return res == int_max ? -1:res;

}};

718 最長重複子陣列

給兩個整數陣列a和b,返回兩個陣列中公共的 長度最長的子陣列的長度。目錄 1 題目分析 2 解題分析 3 示例 1 輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 求兩個陣列公共的子陣列的長度,那麼可以用較短的那個字串去匹配長的字串,使用列舉...

718 最長重複子陣列

給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。可以用dp i j 表示a陣列從i位置,b陣列從j位置開始的最長子陣列長度,由此可知,當a i b j 時,dp i j 取決與dp i 1 j 1 的結果,也即使dp i j dp i 1 j 1 1,當a i b j 時,...

718 最長重複子陣列

題目描述 給兩個整數陣列 a 和 b 返回兩個陣列中公共的 長度最長的子陣列的長度。示例 1 輸入 a 1,2,3,2,1 b 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 題目分析 這道題和兩個字串的最長公共子串行類似,不同之處在於子陣列是連續的,那麼只需要改變一下遞推公...