---
title: '35. Search Insert Position'
description: 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
sidebar:
  label: 'Search Insert Position'
  badge: 'Easy'
---

Array

::::warning
You must write an algorithm with O(log n) runtime complexity.
::::

### Example 1:
- Input: `nums = [1,3,5,6], target = 5`
- Output: `2`

### Example 2:
- Input: `nums = [1,3,5,6], target = 2`
- Output: `1`

### Example 3:
- Input: `nums = [1,3,5,6], target = 7`
- Output: `4`

### Constraints:

- `1 <= nums.length <= 10^4`
- `-10^4 <= nums[i] <= 10^4`
- `nums` contains distinct values sorted in ascending order.
- `-10^4 <= target <= 10^4`

## Approach

```mermaid
flowchart TD
  S(["searchInsert(nums, target)"]) --> I["l = 0, r = n - 1"]
  I --> W{"l <= r?"}
  W -- yes --> M["m = (l + r) // 2"]
  M --> Q{"nums[m] vs target"}
  Q -- equal --> R(["return m"])
  Q -- "nums[m] < target" --> L["l = m + 1"]
  L --> W
  Q -- "nums[m] > target" --> H["r = m - 1"]
  H --> W
  W -- no --> E(["return (l + r) // 2 + 1 — the insert slot"])
```

## Solution

```py
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        l, r = 0, len(nums) - 1

        while l <= r:
            m = (l + r) // 2
            if nums[m] == target:
                return m
            elif nums[m] < target:
                l = m + 1
            elif nums[m] > target:
                r = m - 1

        return (l + r) // 2 + 1
```

## Explanation

[Search Insert Position - Binary Search - Leetcode 35 - Python](https://www.youtube.com/watch?v=K-RYzDZkzCI)
