题目描述:在一个长度为n+1的数组里所有数字都在1~n的范围内,所以数组中至少有一个数是重复的。请找出数组中任意一个重复的数,但不能修改输入的数组。
分析:重复的数一定在某范围内,我们可以逐渐缩小范围,直到找到重复的数。
代码如下:
public sealed class ErfenAndFind { public static int one = -1; public static void Find(int[] arr,int start,int end) { //递归出口 if(start>=end) { one = arr[start]; return; } int count = 0; int len = (start + end) / 2; for(int i=0;i<arr.Length;i++) { if (arr[i] <= len ) count++; } if(count>(len-start+1)) //这里需要注意 { end = len; Find(arr, start, end); } else { start = len+1; Find(arr, start, end); } } }总结:主要考虑怎么写看起来思路清晰。