leetcode 287:Find the Duplicate Number 二分法查找 java版

来源:互联网 发布:手机淘宝5.8.0旧版本 编辑:程序博客网 时间:2024/06/16 00:55

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:

  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(n2).
  4. There is only one duplicate number in the array, but it could be repeated more than once.

题目分析:找到重复数,复杂度小于o(n2),很容易想到用二分法查找。

具体代码如下:

public int findDuplicate(int[] nums) {     int len=nums.length;     int low=1;     int high=len-1;     //在low=high终止     while(low<high)     {     int mid=(low+high)/2;     /**相当于找到low和mid之间的数,包括mid*/     int n=count(low,mid,len,nums);          /**如果有重复的,则相关的值大于等于mid-low+1,因为值中包括mid在内*/     if(n>(high-low)/2+1)     {     high=mid;     }     else     {     low=mid+1;          }          }        return low;    }          public int count(int a,int b,int len,int[] nums)     {     int sum=0;     for(int i=0;i<len;i++)     {     if(nums[i]<=b&&nums[i]>=a)     sum++;     }     return sum;          }


0 0
原创粉丝点击