美文网首页
287. Find the Duplicate Number

287. Find the Duplicate Number

作者: wkhuahuo | 来源:发表于2016-07-25 22:04 被阅读24次

<p>

287. Find the Duplicate Number

Total Accepted: 33760
Total Submissions: 84769
Difficulty: Hard

Given an array nums 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:
You must not modify the array (assume the array is read only).
You must use only constant, O(1) extra space.
Your runtime complexity should be less than O( n^2 )
There is only one duplicate number in the array, but it could be repeated more than once.
Credits:Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
</p>
<code>

方法一

public class FindtheDuplicateNumber287 {
    public int findDuplicate(int[] nums) {
        int fast=0;
          int slow=0;
        ArrayList<Integer> slowli = new ArrayList<Integer>();
        ArrayList<Integer> fastli = new ArrayList<Integer>();
        while(true){
            slow = nums[slow];
            slowli.add(slow);
            fast = nums[nums[fast]];
            fastli.add(fast);
            if(fast==slow){
                break;
            }
        }
        System.out.println(slowli.toString());
        System.out.println(fastli.toString());
        fast = 0;
        while(true){
            slow = nums[slow];
            fast = nums[fast];
            if(slow == fast){
                break;
            }
        }
        return nums[slow];
    }
    public static void main(String[] args){
     //   int[] nums = {1,5,4,2,1,3,1};
        int[] nums = {2,5,9,6,9,3,8,9,7,1};
        FindtheDuplicateNumber287 fdn = new FindtheDuplicateNumber287();
        int result = -1;
        result = fdn.findDuplicate(nums);
        System.out.println(result);
    }
}

</code>

相关文章

网友评论

      本文标题:287. Find the Duplicate Number

      本文链接:https://www.haomeiwen.com/subject/ftzvjttx.html