題目描述
在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2
返回描述
如果陣列中有重複的數字,函式返回true,否則返回false。
如果陣列中有重複的數字,把重複的數字放到引數duplication[0]中。(ps:duplication已經初始化,可以直接賦值使用)
方法一:可以通過定義雜湊表,雜湊表的鍵為陣列中的元素,雜湊表的值為布林型,預設初始化時為 false,如果為true,說明陣列中之前存在改元素,直接返回。
public boolean duplicate(int nums, int length, int dup)
else
}return false;
}
方法二:我們注意到陣列中的陣列都在0~n-1的範圍內。如果這個陣列中沒有重複的陣列,那麼當陣列排序後之後數字 i 將出現在下標為 i 的位置。由於陣列中有重複的陣列,有些位置可能存在多個數字,同時有些位置可能沒有陣列。現在讓我們重排這個陣列。從頭到尾依次掃瞄這個陣列中的每個數字。當掃瞄到下標為 i 的數字時,首先比較這個數字(用 m 表示)是不是等於 i,如果是,則直接掃瞄下乙個數字;如果不是,則拿它和第 m 個陣列進行比較。如果它和第 m 個數字相等,就找到了乙個重複的數字(該數字在下標為 i 和 m 的位置都出現了);如果它和 第 m 個數字不相等,就把 第 i 個數字和第 m 個數字交換,把 m 放在屬於它的位置。接下來重複這個比較、交換的過程,直到發現乙個重複的數字。
以陣列為例來分析找到重複數字的步驟。陣列的第0個元素是2,與它的下標不相等,於是把它和下標為2的數字1交換,交換之後的陣列是,此時第0個元素是1,仍然和它的下標不相等,繼續和它下標為1的元素3交換,得到陣列。接下來繼續交換第0個元素3和第3個數字0,得到陣列。此時第0個元素為0,接著掃瞄下乙個元素,接下來幾個元素,1,2,3都和她們的下標相等,不次 不需要做任何操作。接下來掃瞄到下標為4的數字2,由於它的值和下標不相等,再比較它和下標為2的數字,注意到下標為2的元素也是2,因此找到乙個重複的數字。具體實現**如下:
public boolean duplicate(int nums, int length, int dup)
//交換 nums[i]和 nums[nums[i]](交換 t 和 nums[t])
int temp = t;
t = nums[temp];
nums[temp] = temp;}}
return false;
}
陣列 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 python 實現 an highlighted block ...
陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個 數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。include iostream using namespace ...
陣列中重複的數字
題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 用雜湊表解決的時間複雜度和空間複雜度為o n 因為陣列中...