LeetCode:35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 :
输入: [1,3,5,6], 5
输出: 2
在有序的数组中查找某个数,肯定想到二分法,但是这个题目有点不一样,如果找不到相同的数,那应该返回哪个值?
class Solution { public int searchInsert(int[] nums, int target) { if(nums.length==0){ return 0; } //如果大于最大值,则返回长度值 if(target > nums[nums.length-1]){ return nums.length; } int right = nums.length-1; int left = 0; //while结束时,第一点:right一定在left的左面(紧邻),这是由while条件决定的,否则是跳不出来的。 //第二点:right右侧数必然是>=target的,left左侧数必然是<target的,,这是由于if条件判断加上left,right的移动引起的。 //那么这个位置必然在left。 while(left <= right){ int mid = (left+right)/2; if(target>nums[mid]){ left = mid+1; }else if(target<nums[mid]){ right = mid-1; }else { return mid; } } return left; } }