首先 保证数组是有序的
一、给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
//二分查找
class Solution {
public int searchInsert(int[] nums, int target){
int i=0,j=nums.length-1;//指针两端
while(i<=j){
int m=(i+j)>>>1;//与(i+j)/2类似,有不同右移计算超出int最大值计算,不然就是负数
if(target<nums[m]){
j=m-1;
}else if(target>nums[m]){
i=m+1;
}else {
return m;
}
}
return i;//i>y时候结束,保证这是个有序的,所有返回i.
}
}
二、给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
class Solution {
public int search(int[] nums, int target) {
int i=0,j=nums.length-1;
while(i<=j){
int m=(i+j)>>>1;
if(target<nums[m])
{j=m-1;}
else if(target>nums[m]){
i=m+1;
}else{
return m;
}
}
return -1;
}
}