題目描述:
給定乙個長度為 n 的整數陣列nums
,陣列中所有的數字都在 0∼n−1的範圍內。
陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。
注意:如果某些數字不在 0∼n−1的範圍內,或陣列中不包含重複數字,則返回 -1;
樣例
給定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。
返回 2 或 3。
分析:
本題較為簡單,但雜湊時需要較為細心。
主要思路為:
1.邊界情況:先遍歷一遍,出現超出範圍的數直接返回-1,另外,如果輸入陣列為空,也返回-1.
2.主要的思路:由於向量下標為0-n-1,而元素大小也為0-n-1,所以可以直接雜湊,將nums[i] = i;所以遍歷時遇見二者不等的情況下,就應該把nums[i]與nums[nums[i]]交換,注意在交換前要判等,相等說明重複,可以直接返回。
3.例子:雖然思路簡單,但是可能不易理解,舉例說明,比如nums=,那麼遍歷到第乙個元素nums[0] = 2,就想著把2放到nums[2]的位置,所以與下標為2的元素,也就是nums[nums[i]] = 5交換;重複上面過程,把5放到下標為5的位置,發現恰好是2,所以把2移到nums[0],然後在比較nums[0]與nums[nums[0]]時,發現二者相等,直接輸出2.
該解法時間複雜度為o(n),當然,在判斷元素是否在0-n-1範圍內的第一次遍歷也可以合併到第二次遍歷的開頭。
class solution
for(int i = 0;i < n;i++)
}return -1;//向量為空
}};
13 找出陣列中重複的數字
13.找出陣列中重複的數字 題目 給定乙個長度為 nn 的整數陣列nums,陣列中所有的數字都在 0 n 10 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。注意 如果某些數字不在 0 n 10 n 1 的範圍內,或陣...
陣列 找出陣列中重複的數字
找出陣列中重複的數字 題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。方法 比較數字m是不是等於i,如果是,則...
找出陣列中重複的元素
方法一 使用位圖法,再申請乙個陣列b,用b a i 儲存a i 的重複次數 方法二 使用map對映表。map是乙個容器。第乙個元素為關鍵字key,第二個元素為關鍵字的值。這裡是map的基本用法 include include using namespace std bool findmostfreq...