LeetCode Search Insert Position (二分查找)

题意

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
给定一个有序数组和一个目标值,查找出目标值在数组中出现的位置,如果没有出现,则返回它应该插入的位置。

解法

二分查找,记录mid值,查找结束后判断nums[mid] == target,如果相等的话就返回,不相等的话判断这个位置上的值是不是比target大,如果比它大那么target就直接插在mid这个位置,比target小的话就把target插入到下一个位置。

class Solution
{
public:
    int searchInsert(vector<int>& nums, int target)
    {
	    int	left = 0;
	    int	right = nums.size() - 1;
	    int	mid = 0;
	    int	index = 0;

	    while(left <= right)
	    {
		    mid = (left + right) >> 1;
		    if(nums[mid] == target)
		    {
			    index = mid;
			    break;
		    }
		    else
			    if(nums[mid] < target)
				    left = mid + 1;
			    else
				    right = mid - 1;
	    }
	    if(nums[index] == target)
		    return	index;
	    if(target > nums[mid])
		    return	mid + 1;
	    else
		    return	mid;
    }
};
posted @ 2016-09-20 18:30  Decouple  阅读(242)  评论(0编辑  收藏  举报