题目地址:35.Search Insert Position
解题思路:一看到题目的关键字有序,不重复整数,第一时间想到二分查找
。
这道题是将二分查找
进行了拓展,如果target
不存在数组内,还需要进一步判断target
的插入位置,
target
存在数组内的情况就不考虑了,与704. Binary Search并无二致。
下面就考虑,元素不存在需要插入的情况。利用数组内元素有序的特性,首先考虑最简单的三种情况:
- 插入元素为最小元素
- 插入元素为最大元素
- 插入空数组
然后除了在找到相同的数返回的情况后,和纯二分查找相比,在每次不相等比较后多一个位置记录。
注意此处位置记录的差异,与比较的数相比,比他小就需要把当前元素后移一位,然后插入到他原来的位置,所以不用+1。
class Solution {
public int searchInsert(int[] nums, int target) {
int low=0;
int high=nums.length-1;
int insertLocation=high;
if (nums.length==0)
{
return 0;
}
if (target<nums[0])
{
return 0;
}
if (target>nums[nums.length-1])
{
return nums.length;
}
while(low<=high)
{
int mid = (low + high)/2;
if(nums[mid]==target)
{
return mid;
}else if(nums[mid]>target)
{
high=mid-1;
insertLocation = high+1;
}else if(nums[mid]<target)
{
low=mid+1;
insertLocation = low;
}
}
return insertLocation;
}
}