版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tongjinrui/article/details/80669125
给定一个排序数组nums(无重复元素)与目标值target,如果target在nums里出现,则返回target所在下标,如果target在nums里未出现,则返回target应该插入位置的数组下标,使得将target插入数组nums后,数组仍有序。
//
// main.cpp
// binary_serarh_insert_index
//
// Created by tong on 2018/6/12.
// Copyright © 2018年 tong. All rights reserved.
//
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int solution(vector<int> &nums,int target)
{
int index = -1;
int begin = 0;
int end = nums.size() - 1;
while(index == -1)
{
int mid = (begin + end) / 2;
if(nums[mid] == target)
index = mid;
else if(nums[mid] < target)
{
if (mid == nums.size() -1 || nums[mid+1] > target )// 边界判断条件,如果要插入的位置超过了元素自身的长度
index = mid + 1;
else
begin = mid + 1;
}
else if(nums[mid] > target)
{
if (mid == 0 || target > nums[mid-1])//判断如果要插入的位置在第一个元素的位置
index = mid;
else
end = mid - 1;
}
}
return index;
}
int main(int argc, const char * argv[]) {
vector<int> nums = {2,3,4,5,6,7,8,9,19};
cout<<solution(nums, 33)<<endl;
return 0;
}