《原神攻略》海中魔王任務後隱藏對話觸發位置
阿新 • • 發佈:2021-06-16
陣列中重複的數字
題目描述
在一個長度為 n 的數組裡的所有數字都在 0 到 n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的,也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。
Input:
{2, 3, 1, 0, 2, 5}
Output:
2
解題思路
要求時間複雜度 O(N),空間複雜度 O(1)。因此不能使用排序的方法,也不能使用額外的標記陣列。
對於這種陣列元素在 [0, n-1] 範圍內的問題,可以將值為 i 的元素調整到第 i 個位置上進行求解。在調整過程中,如果第 i 位置上已經有一個值為 i 的元素,就可以知道 i 值重複。
以 (2, 3, 1, 0, 2, 5) 為例,遍歷到位置 4 時,該位置上的數為 2,但是第 2 個位置上已經有一個 2 的值了,因此可以知道 2 重複:
程式碼實現
package main /** * 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可 * * * @param numbers int整型一維陣列 * @return int整型 */ func duplicate( numbers []int ) int { if len(numbers) == 0 { return -1 } // write code here s := make([]int, 0) for i := 0;i < len(numbers);i++ { s = append(s, -1) } for _, v := range numbers { if s[v] != -1 { return v } s[v] = v } return 0 }