陣列中重複數字的問題

2021-08-31 07:13:39 字數 1204 閱讀 9136

陣列中重複數字的問題也比較多,也對這一類問題做個總結:

題目描述

在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。

例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。

這個問題比較常見,也有幾種變形

1.劍指offer上有乙個題,那個題說的是,一連串數字鐘只有乙個出現1次,其餘出現兩次,找出出現那一次的數字,採用的是異或的方法,

2.如果有兩個數字出現1次,其餘數字出現2次,採用的是異或,根據異或值進行劃分堆 ,不同的堆對應最後異或值的不同,然後各個堆內部進行異或即可。

3.如果題目變形到不知道重複的次數,也不知道有哪些重複的,那麼應該怎麼做呢?

分析:● 解法1:如果n個元素的範圍都是在1到n,所以如果沒有重複元素,則每乙個位置恰好可以對應陣列中的乙個元素之,通過將當前元素k交換到其本身應該在的位 置k,也就是k=array[i], array[array[i],並判斷是否存在duplication或者已經就緒。時間複雜度o(n),空間複雜度o(1);不交換,直接疊加也是一樣的。

● 解法2:由於元素取值範圍確定,可以使用bitmap將陣列元素對映到對應的位置,如果乙個位置對應了兩個元素,則有重複。時間複雜度和空間複雜度都是o(n);

hashmap的方法:

bitmap的方法:

● 解法3:先排序,o(nlogn),然後比較相鄰元素是否相等,o(n);

陣列中重複數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回...

陣列中的重複數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1 排序 將陣列排序,然後掃瞄排序後的陣列即可。時間複雜度 o nl...

陣列中的重複數字

題目 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出的重複的數字2或者3。分析 陣列中的數字都在0 n 1之間,如果沒有該陣列中沒有重複的數...