题目描述:不修改数组找出重复的数字
在一个长度为N+1的数组里面的所有数字都在范围1~N范围内,所以数组至少有一个数字是重复的,请找出重复数字,但是不能修改输入的数组。
# -*- coding:utf-8 -*-
class Solution:
def countRange(numbers,l,start,end):
l=len(numbers)
if l==0:
return 0
count=0
for i in range(l):
if numbers[i]>=start and numbers[i]<=end:
count+=1
return count
def duplicate(self, numbers):
# write code here
l=len(numbers)
if l == 0:
return -1
start=1
end=l-1
while(end>=start):
middle=((end-start)>>1)+start
count=countRange(numbers,l,start,middle)
if end== start:
if count>1:
return start
else:
break;
if count>(middle-start+1):
end=middle
else:
start=middle+1
return -1