35. 搜索插入位置
class Solution {
public int searchInsert(int[] nums, int target) {
int high = nums.length - 1;
int low = 0;
while ( low <= high ) {
int mid = (low + high ) >>1;
if ( target > nums[mid]) {
low = mid + 1;
}else if ( target < nums[mid]) {
high = mid - 1;
}else {
return mid;
}
}
return low;
}
}
162. 寻找峰值
class Solution {
public int findPeakElement(int[] nums) {
if(nums.length==0||nums==null) return -1;
if(nums.length==1) return 0;
int l=0;
int r=nums.length-1;
while(l<r){
int mid=(r-l)/2+l;
if(nums[mid]<nums[mid+1]) l=mid+1;
else r=mid;
}
return l;
}
}
NC48 二分查找
import java.util.*;
public class Solution {
public int upper_bound_ (int n, int v, int[] a) {
int i=0;
int j=n-1;
int index=n+1;
if (v > a[n - 1]) return n + 1;
while(i<j){
int mid=(i+j)/2;
if(a[mid]>=v){
j=mid;
}
else{
i=mid+1;
}
}
return i+1;
}
}
NC105 转动过得有序数组中寻找目标值
import java.util.*;
public class Solution {
public int search (int[] A, int target) {
int len = A.length;
int left = 0;
int right = len-1;
while(left <= right)
{
int middle = (right+left)>>1;
if(A[middle] == target)
return middle;
if(A[left] <= A[middle])
{
if(A[left] <= target && target < A[middle])
right = middle-1;
else
left = middle+1;
}
else
{
if(A[middle] < target && target <= A[right])
left = middle+1;
else
right = middle-1;
}
}
return -1;
}
}