1. 程式人生 > 其它 >offer03:陣列中重複的數字

offer03:陣列中重複的數字

技術標籤:資料結構leetcode演算法

offer03:陣列中重複的數字

問題:

找出陣列中重複的數字

問題描述:

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

解決方法:遍歷陣列

由於只需要找出陣列中任意一個重複的數字,因此遍歷陣列,遇到重複的數字即返回。為了判斷一個數字是否重複遇到,使用集合儲存已經遇到的數字,如果遇到的一個數字已經在集合中,則當前的數字是重複數字。

  1. 初始化集合為空集合,設重複的數字 repeat = -1

  2. 遍歷陣列中的每個元素:

    往集合中填加元素時(set.add()),判斷元素是否在已存在 = 元素是否可以加入集合

    可以加入集合 = 元素不在集合中;將該元素加入集合。

    不可以加入集合 = 在集合中;即找到重複數字,並把重複的數字賦值給repeat;遍歷結束。

  3. 返回 repeat

程式碼

class Solution{
    public int findRepeatNumber(int [] nums){
        Set<Integer> set = new HashSet<Integer>();
        int repeat = -1;
        for
(int num : nums){ if (!set.add(num)){ repeat = num; break; } } return repeat; } }

複雜度

  • 時間複雜度:O(n)。 遍歷陣列一遍。使用雜湊集合(HashSet),新增元素的時間複雜度為 O(1),故總的時間複雜度是 O(n)。

  • 空間複雜度:O(n)。不重複的每個元素都可能存入集合,因此佔用 O(n) 額外空間。

作者:LeetCode-Solution

連結:力扣

來源:力扣(LeetCode)

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。