1. 程式人生 > 其它 >【LeetCode】—— 尋找重複數

【LeetCode】—— 尋找重複數

給定一個包含n + 1 個整數的陣列nums ,其數字都在 1 到 n之間(包括 1 和 n),可知至少存在一個重複的整數。

假設 nums 只有 一個重複的整數 ,找出 這個重複的數 。

你設計的解決方案必須不修改陣列 nums 且只用常量級 O(1) 的額外空間。

示例 1:

輸入:nums = [1,3,4,2,2]
輸出:2
示例 2:

輸入:nums = [3,1,3,4,2]
輸出:3
示例 3:

輸入:nums = [1,1]
輸出:1
示例 4:

輸入:nums = [1,1,2]
輸出:1

提示:

1 <= n <= 105
nums.length == n + 1
1 <= nums[i] <= n
nums 中 只有一個整數 出現 兩次或多次 ,其餘整數均只出現 一次

 1 class Solution {
 2     public int findDuplicate(int[] nums) {
 3         // 快慢指標
 4         int slow = 0;
 5         int fast = 0;
 6         slow = nums[slow];
 7         fast = nums[nums[fast]];
 8         while (slow != fast){
 9             slow = nums[slow];
10             fast = nums[nums[fast]];
11 } 12 // 快慢指標相遇,重新回到原點 13 slow = 0; 14 while (slow!=fast){ 15 slow = nums[slow]; 16 fast = nums[fast]; 17 } 18 return slow; 19 } 20 }

解題關鍵:

快慢指標