---
# System prepended metadata

title: 35. Search Insert Position 筆記
tags: [LeetCode]

---

# 35. Search Insert Position 筆記

題目：給定一個排序好的陣列，並且不重複，找到target就回傳index，找不的話就回傳應該插入在哪邊。

時間複雜度必須為O(log n)

就是典型的Binary Search，一種在有序陣列中搜尋某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始，如果中間元素正好是要搜尋的元素，則搜尋過程結束；如果某一特定元素大於或者小於中間元素，則在陣列大於或小於中間元素的那一半中搜尋，而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空，則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
![](https://i.imgur.com/zLuMCYY.png)

實作流程：排序過的陣列，搜尋中間值mid，mid的右邊比他大，左邊比他小，如果mid==target就輸出index，如果mid>target，答案只能在mid左邊。

等於說每次都砍一半，故稱為二元搜尋法。比對次數就是陣列長度就是2的幾次方，所以符合題意O(log n)

```c=
int searchInsert(int* nums, int numsSize, int target){
    int left = 0;
    int right = numsSize - 1;
    int mid = 0;
    while(left <= right) {
        mid = (left + right) / 2;
        if(nums[mid] == target)
            return mid;
        else if(nums[mid] > target) {
            right = mid - 1;
        }
        else
            left = mid + 1;
    }
    return left;
}
```

###### tags: `LeetCode`