60 搜索插入位置

原题网址: http://www.lintcode.com/zh-cn/problem/search-insert-position/#

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。

你可以假设在数组中无重复元素。

样例

[1,3,5,6],5 → 2

[1,3,5,6],2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6],0 → 0

挑战 

O(log(n)) time

标签 
 
 1 #include <iostream>
 2 #include <vector>
 3 #include <math.h>
 4 #include <string>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 int searchInsert(vector<int> &A, int target)
 9 {
10     if (A.empty())
11     {
12         return 0;
13     }
14     int size=A.size();
15     if (target<A[0])
16     {
17         return 0;
18     }
19     if (target>A[size-1])
20     {
21         return size;
22     }
23 
24     int low=0,high=size-1,mid=(low+high)/2;
25     while(low<=high)
26     {
27         if (target==A[mid])
28         {
29             return mid;
30         }
31         else if (target<A[mid])
32         {
33             high=mid-1;
34         }
35         else
36         {
37             low=mid+1;
38         }
39         mid=(low+high)/2;
40     }
41     return low;//最接近target的值,且比前一个值大;
42 }

参考: 

 

posted @ 2018-03-23 20:15  eeeeeeee鹅  阅读(261)  评论(0编辑  收藏  举报