【LeetCode】—— 尋找重複數
阿新 • • 發佈:2021-11-21
給定一個包含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 }
解題關鍵:
快慢指標