1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public int binarySearch(int[] nums, int target) { return myBinarySearch(nums, target, 0, nums.length-1); } /** * @intention:二分查找也是递归的做法 */ private int myBinarySearch(int[] nums, int target, int start, int end) { if(start == end && target != nums[start]) { return -1; //找不到 } int mid = start + (end-start)/2; //mid偏左 if(target < nums[mid]) { if(mid != 0) { return myBinarySearch(nums, target, start, mid-1); //防止下标越界 }else{ return -1; } }else if (target > nums[mid]) { return myBinarySearch(nums, target, mid+1, end); }else { return findIndex(nums, target, mid); } } private int findIndex(int[] nums, int target, int tmpIndex) { while(target == nums[tmpIndex]) { if(tmpIndex == 0) { //防止下标越界 return tmpIndex; } tmpIndex--; } return tmpIndex+1; }
|