在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。如输入int[] nums = {5,7,7,8,8,10},target=8;输出:8
package learnproject.offer;
/*
* 53.在排序数组中查找数据I
* 统计一个数字在排序数组中出现的次数
*/
public class Demo53 {
public int search(int[] nums, int target) {
int length = nums.length;
if(length == 0) {
return 0;
}
return search(nums,0,length-1,target);
}
public int search(int[] nums,int left,int right,int target) {
int count =0;
if(left == right ) {
if(nums[left] == target) {
count++;
}
}
else if(right == left+1) {
if(nums[left] == target) {
count++;
}
if(nums[right] == target) {
count++;
}
return count;
}else {
int mid = (left + right)/2;
if(target<=nums[mid]) {
count = count+search(nums,left,mid,target);
}
if(target >= nums[mid+1]) {
count = count + search(nums,mid+1,right,target);
}
return count;
}
return count;
}
public static void main(String args[]) {
Demo53 demo = new Demo53();
int[] nums = {5,7,7,8,8,10};
System.out.println(demo.search(nums, 8));
}
}