劍指Offer 面試題3 陣列中重複的數字

2021-08-15 03:15:36 字數 748 閱讀 6826

找出陣列中重複的數字

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

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

有幾個思路來解決這個問題:

1.排序

這是最直接的方法,然後從頭到尾掃瞄就可以了,時間複雜度:o(nlogn)

2.雜湊

從頭到尾掃瞄,判斷雜湊表中是否有這個數字,有的話則找到重複數,沒有的話就加入雜湊表。時間複雜度:o(n),空間複雜度o(n)

3.嘗試用一種空間複雜度是o(1)的方法。

從頭到尾掃瞄這個陣列,掃瞄到下標為i的數字時與這個數字(m)比較,如果這個數字等於i,就掃瞄下乙個,如果不等於i就把他放到m的位置,新的數字再與i比較,以此類推,直到找到乙個重複的數字。

#includeusing namespace std;

bool charge(int nums, int length, int* charge)

for (int i = 0; i < length; i++)

for (int i = 0; i < length; i++)

int temp = nums[i];

nums[i] = nums[temp];

nums[temp] = temp;

} }return false;

}

劍指offer 面試題3

思路 從左下角或者右上角開始比較 簡單版本 查詢方式從右上角開始查詢 如果當前元素大於target,左移一位繼續查詢 如果當前元素小於target,下移一位繼續查詢 進行了簡單的修改,可以判定輸入型別為字元的情況 查詢方式從左下角開始查詢 如果當前元素大於target,上移一位繼續查詢 如果當前元素...

劍指offer面試題3

前言 從最近的比賽中,真的可以看出來自己做題目太少了,一些常見的演算法,思路都不怎麼會,接下來要好好努力了 分析 書中給的分析思路很好,要解決乙個複雜的問題,最有效的方法就是從乙個具體的問題入手,這道題就可以舉例子,查詢7這個元素,首先從右上角開始,9比7大,所以9所在的列不會有,查詢8,比7大,所...

《劍指offer》陣列相關面試題

在乙個長度為n的陣列裡所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複,也不知道重複了幾次,請找出陣列中任意乙個重複的數字。例如,長度為7的陣列,那麼對應的輸出應該是重複的數字2或者3.思路 重排這個陣列,從頭到尾依次掃瞄這個陣列中的每個數字。掃到下標為i的數字m時 首先...