劍指 Offer 03 陣列中重複的數字

2022-07-21 06:00:12 字數 928 閱讀 1603

用時4分02秒,用雜湊表做的,顯然不夠優化:

方法二:

考慮先排序再尋找:

效能有所提高,但是還有上公升空間,應該怎麼優化?

因為陣列中的數字都在0~n-1的範圍內,如果沒有重複數字,則當陣列排序之後,數字i出現在下標為i的位置。

由於陣列中有重複的數字,有些位置可能存在多個數字,同時有些位置沒有數字。

從頭到尾掃瞄陣列中的每個數字。當掃瞄下標為i的數字時,首先比較這個數字(用m表示)是不是等於i。如果是,接著掃瞄下乙個數字;

如果不是,再拿它和第m個數字進行比較。

若它與第m個數字相等,則返回;

若不相等,就把第i個數字與第m個數字進行交換,把m放在屬於它的位置上。

重複這個比較和交換過程,直到我們發現乙個重複數字。

劍指offer03 陣列中重複的數字

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3限制 2 n 100000 首先拿到這道題最先想到的是...

劍指Offer03 陣列中重複的數字

劍指offer典型題整理 爭取做最好的題解 題目描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限...

劍指offer 03陣列中重複的數字

找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 首...