###### tags: `Leetcode` `easy` `binary search` `python` `c++` `Top 100 Liked Questions`
# 35. Search Insert Position
## [題目來源:] https://leetcode.com/problems/search-insert-position/
## 題目:
Given a sorted array of distinct integers 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 must write an algorithm with O(log n) runtime complexity.**
## 解題想法:
看到O(log n): 多半往二分法思考
## Python:
``` python=
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
'''
O(log n) runtime complexity. -> 對半分
#二元搜尋Binary Search!!!!
'''
head=0
tail=len(nums)-1
while head<=tail:
mid=tail+(head-tail)//2
if nums[mid]==target:
return mid
elif nums[mid]>target:
tail=mid-1
else:
head=mid+1
return head
if __name__ == '__main__':
result=Solution()
ans=result.searchInsert(nums = [1,3,5,6], target = 5)
print(ans)
```
## C++:
``` cpp=
#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
int searchInsert(vector<int> &nums, int target)
{
int head = 0;
int tail = nums.size() - 1;
while (head <= tail)
{
int mid = tail + (head - tail) / 2;
if (nums[mid] == target)
return mid;
else if (nums[mid] > target)
tail = mid - 1;
else
head = mid + 1;
}
return head;
}
};
int main()
{
vector<int> nums = {1, 3, 5, 6};
int target = 5;
Solution res;
int ans = res.searchInsert(nums, target);
cout << ans << endl;
return 0;
}
```