js乙個數包含在陣列中 陣列中重複的數

2021-10-17 10:26:40 字數 2154 閱讀 7956

之前有寫過 找出陣列中只出現一次的數,今天再來看下怎麼找出陣列中重複出現的數。

有乙個長度為 n 的陣列,所有的數字都在 0~n-1 的範圍,現在要求找出陣列中任意乙個重複的數字。
這個題目看起來很簡單,看看下面幾種思路。

思路一:

先給陣列排序,然後再遍歷一遍有序陣列,依次比較相鄰元素,就很容易能找出陣列中重複的值。使用快排排序的話時間複雜度為 o(nlogn) 。

思路二:

利用空間換時間的思想,新建乙個雜湊表,然後遍歷陣列,每掃瞄乙個元素都去雜湊表裡查詢是否也存在該元素,如果存在,即找到乙個重複的數,如果不存在,則將該元素儲存到雜湊表。這個思路的時間複雜度為 o(n),但空間複雜度也為 o(n)。

思路三:

認真審題,你會發現有一些特點,長度為 n 的陣列,且元素的大小範圍為 0~n-1,如果沒有重複的數字的話,那麼陣列排序後數字 i 就是下標 i 所在的位置了,即 arr[i] == i。所以我們可以巧妙利用陣列的下標特性來尋找解決方案。

如果上面那句話還沒看明白,看下面這個例子你就知道了。

#arr陣列中沒有重複元素的情況

#陣列長度為7,元素範圍為0-6

arr = [0,1,2,3,4,5,6]

arr[0] == 0

arr[1] == 1

arr[2] == 2

我們通過乙個具體的例子來捋一捋思路,先準備乙個陣列。

arr = [4,1,1,3,5,2,5]

從頭開始遍歷陣列,判斷 arr[i] 是否等於 i,如果等於則無需任何操作繼續往後遍歷。

如果 arr[i] 不等於 i,則繼續拿 arr[i] 和 arr[arr[i]] 比較,如果 arr[i] 和 arr[arr[i]] 相等,則找到乙個重複的數,因為該數字在 i 下標和 arr[i] 下標同時出現了。

如果 arr[i] 和 arr[arr[i]] 不相等,那就交換他們的位置,交換的目的就是為了把 arr[i] 放到屬於他的位置,保證 arr[i] == i。

交換了之後,再重複上面的比較、交換操作,直到找到乙個重複的數。

arr = [4,1,1,3,2,5,5]

arr[0] != 0

則比較 arr[0] 和 arr[4]

arr[0] != arr[4]

則交換 arr[0] 和 arr[4] 的位置

新陣列變成

arr = [2,1,1,3,4,5,5]

再從頭開始遍歷比較

arr[0] != 0

則比較 arr[0] 和 arr[2]

arr[0] != arr[2]

則交換 arr[0] 和 arr[2] 的位置

新陣列變成

arr = [1,1,2,3,4,5,5]

再從頭開始遍歷比較

arr[0] != 0

則比較 arr[0] 和 arr[1]

arr[0] == arr[1]

找到乙個重複的數

你可能會問,為什麼要交換,交換的目的就是為了把元素放到屬於它的位置上,要讓這個陣列滿足 arr[i] == i,換句話說就是不斷的調整陣列,使其滿足 arr[i] == i,比如陣列中第乙個元素 arr[0] 為 4 ,那就要把元素 4 放到下標為 4 的位置上去。下面是乙份用 python 實現的完整**,大家可以參考下。

# encoding=utf-8

def findduplicate(arr):

if arr is none:

return false

for i in arr:

while arr[i] != i:

if (arr[i] == arr[arr[i]]):#找到重複的值

return arr[arr[i]]

else:#如果不相等就交換位置

temp = arr[arr[i]]

arr[arr[i]] = arr[i]

arr[i] = temp

return false

arr = [4,1,1,3,5,2,5]

print(findduplicate(arr))

C 查詢乙個數是否在陣列中find用法

在這裡可以發現直接輸出a為陣列首元素的位址在這裡是0x00b3f8a0,a 4即為加4個int型別長度,即是加16個位元組位0x00b3f8b0,這裡sizeof a 為20,則a sizeof a sizeof a 0 a 5,所以位址為0x00b3f8b4.在這裡find也是返回位址值的 00b...

js 判斷乙個值是否在陣列中

js判斷乙個值是否存在陣列中 瓊臺部落格 定義乙個判斷函式 var in array function arr 遍歷是否在陣列中 for var i 0,k arr.length i 如果不在陣列中就會返回false return false 給字串新增原型 string.prototype.in ...

js判斷乙個元素是否在陣列中

js中存在乙個陣列,如何判斷乙個元素是否存在於這個陣列中呢,首先是通過迴圈的辦法判斷,如下 var arr a s d f console.info isinarray arr,a 迴圈的方式 使用迴圈的方式判斷乙個元素是否存在於乙個陣列中 param arr 陣列 param value 元素值 ...