1. 程式人生 > 實用技巧 >【劍指offer第1題】找出陣列中重複的數字

【劍指offer第1題】找出陣列中重複的數字

【描述】

給定一個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0∼n−1 的範圍內。

陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。

請找出陣列中任意一個重複的數字。

注意:如果某些數字不在 0∼n−1 的範圍內,或陣列中不包含重複數字,則返回 -1;

樣例
給定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。

返回 2 或 3。

【思路】最佳的時間複雜度為O(n) 空間複雜度為O(1)

主要是藉助題幹中的關鍵資訊:“長度為n的陣列,數值範圍在[0,n-1]之內,且某些數字重複”,所以可藉助下標和數值本身之間的對應關係

,求解此題。即如果某下標位置的元素出現過2次,則直接輸出。具體的操作過程,可以將元素和下標值進行比較,如果相等,則比較下一個;否則將該位置的元素和該元素值對應的下標值進行交換,交換前先看下是否下標值的位置已經是匹配的了,即下標值和元素值相等,如果是,直接輸出該位置的元素值。