【劍指offer第1題】找出陣列中重複的數字
阿新 • • 發佈:2020-07-14
【描述】
給定一個長度為 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次,則直接輸出。具體的操作過程,可以將元素和下標值進行比較,如果相等,則比較下一個;否則將該位置的元素和該元素值對應的下標值進行交換,交換前先看下是否下標值的位置已經是匹配的了,即下標值和元素值相等,如果是,直接輸出該位置的元素值。