704.二分查找
二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
class Solution { public int search(int[] nums, int target) { int l=0,r=nums.length-1; while(l<=r){ int mid=(r+l)/2; if(nums[mid]==target){ return mid; } else if(nums[mid]>target){ r=mid-1; } else { l=mid+1; } } return -1; } }
二分查找有序重复数组
请实现有重复数字的升序数组的二分查找。
输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数(指不存在大于等于查找值的数),则输出数组长度加一。
public int upper_bound_ (int n, int v, int[] a) { // write code here if(v>a[n-1]){ return n+1; } int start = 0; int end = n-1; int mid=start+(end-start)/2; while(start < end){ if(a[mid]>=v){ end = mid; }else{ start = mid+1; } mid = start+(end-start)/2; } return mid+1; } }