problem:
given an array in length of n, in which theelements are integers distributed from 1 to n, please judge whether there isduplication quickly.
即乙個長度為
n的陣列,元素取值範圍為1到
n,要求快速判斷是否存在重複元素。
解決方法:
1, 最直觀的解法:兩兩比較陣列元素,但是複雜度為
o(n2)。
2, 優化版
1:先對陣列排序,然後比較相鄰的元素是否相等或判斷陣列元素值是否與其下表相等;該方法時間複雜度依賴於排序演算法一般為
o(nlgn)。
3, 優化版
2:利用
hash
,建立乙個大小為n的
hash
表,遍歷陣列,出現的元素在
hash
表中標記為
1,若某個元素已經為
1則有重複;為了減少空間可以把
hash
表替換為
bitmap
;該方法時間複雜度為
o(n)。
4, 優化版
3:如果
n個元素的範圍都是在1到
n,所以如果沒有重複元素,則每乙個位置恰好可以對應陣列中的乙個元素之,通過將當前元素
k交換到其本身應該在的位置
k,也就是
k=array[i],array[array[i
],並判斷是否存在
duplication
或者已經就緒。時間複雜度
o(n)
,空間複雜度
o(1)
;但是該方法需要修改原陣列。
下面給出方法
4的乙個簡單實現:
bool hasdup(int a, int n)
} return false;
}
(筆試題)如何判斷陣列中是否存在重複元素
假設陣列a有n個元素,元素的取值範圍為1 n,如何判定陣列是否存在重複元素?方法1 陣列排序,比較相鄰元素是否相等 時間複雜度 o nlogn 空間複雜度 o 1 方法2 使用bitmap 位圖 定義長度為n 8的char陣列,每個bit表示對應數字是否出現過。遍歷陣列,使用bitmap對數字是否出...
面試題 js怎麼判斷是否是陣列?
js怎麼判斷是否是陣列?方法一 isarray 陣列自帶的判斷方法 let a 1 2,3 array.isarray a true方法二 instanceof操作符 let a 1 2,3 a instanceof array true方法三 constructor.tostring 方法 let...
給定乙個整數陣列,判斷是否存在重複元素。
給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3,2,4,2 輸出 t...