劍指offer03 陣列中重複的數字

2022-07-12 01:00:11 字數 1005 閱讀 1334

找出陣列中重複的數字

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

限制:2 <= n <= 100000

方法一——排序

先把輸入的陣列排序,然後從頭到尾掃瞄排序後的陣列就可以了

時間複雜度o(nlogn)

空間複雜度o(logn)

#include class solution return 0;

}};

方法二——bool陣列實現雜湊

由於限制了2 <= n <= 100000,我們只需要申請大小為100000的布林陣列,初始化全為false標記陣列中的元素出現與否,若第一次出現則置為true,第二次出現則直接輸出

時間複雜度o(n)

空間複雜度o(n)

class solution ;

for(int i = 0;i < n;++i)return 0;

}};

方法三——根據下標定位

注意到陣列中的數字都在0~n-1的範圍內,如果這個陣列中沒有重複的數字,那麼當陣列排序之後數字i將出現在下標為i的位置。由於陣列中有重複的數字,那麼有些位置就可能存在多個數字。

演算法描述

從頭到尾依次掃瞄陣列,當掃瞄到下標為i的數字時,

首先比較這個數字(記為m)是否等於i,

若是,說明數字已在對應位置上了,則接著掃瞄下乙個數字

否則,看陣列第m個數字

如果陣列第m個數字已經是m的話,說明已經找到重複的元素了

否則,交換陣列第i個數字和第m個數字,讓m排到屬於它的位置

時間複雜度o(n)(遍歷和交換均為o(n))

空間複雜度o(1)

class solution 

}return 0;

}};

劍指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 首...