LeetCode – Find the Duplicate Number (Java)
Given an array containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.
Note:
1) You must not modify the array (assume the array is read only).
2) You must use only constant, O(1) extra space.
3) Your runtime complexity should be less than O(n^2).
4) There is only one duplicate number in the array, but it could be repeated more than once.
Java Solution  Finding Cycle
The following shows how fast and slow pointers solution works. It basically contains 2 steps: 1) find the meeting point 2) start from the beginning and the meeting point respectively and find the intersection point.
public int findDuplicate(int[] nums) { int slow = 0; int fast = 0; do{ slow = nums[slow]; fast = nums[nums[fast]]; } while(slow != fast); int find = 0; while(find != slow){ slow = nums[slow]; find = nums[find]; } return find; } 
If we can assume there is only one duplicate number, it can be easily solved by using the sum of the array.
public int findDuplicate(int[] nums) { int sum = 0; for(int i: nums){ sum+=i; } int n=nums.length; return sum  ((n1)*n)/2; } 
<pre><code> String foo = "bar"; </code></pre>

Marina

d_r_o_i_d

Yijhe Huang

kun zhang

Yijhe Huang

Ankit Shah

Yijhe Huang

Ankit Shah

Yijhe Huang