//在不修改数组的情况下,如何找出重复的数字,数字范围小于数组长度
//思路,使用二分法
//首先数组数字大小在数组长度之间(假设数组长度为6),我们可以把数组分成0~2 和35两部分。如果02的数组元素有四个,那么必定在02有重复元素所以我们可以在把02分成0~1和2两部分
//这个算法是以时间换空间
空间复杂为o(1)时间复杂为o(nlog(n))
let arr=[2,0,5,4,3,3,3,2]
let start=0,
end=arr.length-1;
for(let i=0;i<(end-start)😉{
let middle=Math.floor((start+end)/2),count1=middle+1;
let count=countRange(start,middle);
if(count>count1){
end=middle
}else{
start=middle+1
}
if(start===end){
if(count>1){
console.log(start)
}else{
console.log("meiyou")
}
start=1
end=0
}
console.log(count+"--------"+start+"----------"+end+"=========="+middle)
}
//计算数组元素在某个范围出现的次数
function countRange(start,end){
let result=0;
for(let i=0;i<arr.length;i++){
if(arr[i]>(start-1)&&arr[i]<(end+1)){
result++
}
}
return result
}