找出陣列中重複的數字

2021-09-25 02:33:56 字數 1030 閱讀 7670

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

例:輸入長度為7的陣列, 對應的輸出的重複的數字是2或3。

方法1:先排序在查詢

方法2:利用雜湊表

從頭到尾掃瞄每個數字,每掃瞄乙個數字,都可以用o(1)的時間來判斷雜湊表是否包含了該數字。如果雜湊表中沒有該數字,就將其加入雜湊表中;如果雜湊表中有該數字,就找到了乙個重複的數字。時間複雜度為o(n), 空間複雜度為o(n).方法

public static boolean  duplicate(int nums)

}hashmapmap = new hashmap<>();

for(int i = 0; i < nums.length; i++)else

if(map.get(nums[i]) != 1)

}}

方法3:根據數字和下標的規律

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

從頭到尾依次掃瞄這個陣列中的每個數字,當掃瞄到下標為i的數字時,首先比較這個數字(用m表示)是不是等於i。如果是,則接著掃瞄下乙個數字;如果不是,則再拿它和第m個數字進行比較。如果它和第m個數字相等,就找到乙個重複的數字;如果,它和第m個數字不相等,就把第i個數字和第m個數字交換,把m放到屬於它的位置。接下來再重複這個比較、交換過程,直到找到乙個重複的元素。

public static boolean duplication(int nums)

}for(int i = 0; i < nums.length; i++)

}int temp = nums[i];

nums[i] = nums[temp];

nums[temp] = temp;

}return false;

}

找出陣列中重複的數字

面試題3 一 找出陣列中重複的數字 題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。static bool get duplicate num1 std vecto...

找出陣列中重複的數字

給定乙個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。注意 如果某些數字不在 0 n 1 的範圍內,或陣列中不包含重複數字,則返回 1 給定 nums 2,3...

找出陣列中重複的數字

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