Skip to content

Commit f63a759

Browse files
committed
35. Search Insert Position
```Solution.c int searchInsert(int* nums, int numsSize, int target) { int left = 0, right = numsSize - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; } ``` ```Solution.cpp class Solution { public: int searchInsert(vector<int>& nums, int target) { int left = 0, right = nums.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; } }; ``` ```Solution.cs public class Solution { public int SearchInsert(int[] nums, int target) { int left = 0, right = nums.Length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; } } ``` ```Solution.dart class Solution { int searchInsert(List<int> nums, int target) { int left = 0, right = nums.length - 1; while (left <= right) { int mid = (left + right) ~/ 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; } } ``` ```Solution.erl -spec search_insert([integer()], integer()) -> integer(). search_insert(Nums, Target) -> search(Nums, Target, 0, length(Nums) - 1). search(Nums, Target, Left, Right) when Left =< Right -> Mid = (Left + Right) div 2, Val = lists:nth(Mid + 1, Nums), case Val of Target -> Mid; _ when Val < Target -> search(Nums, Target, Mid + 1, Right); _ -> search(Nums, Target, Left, Mid - 1) end; search(_, _, Left, _) -> Left. ``` ```Solution.ex defmodule Solution do @SPEC search_insert(nums :: [integer], target :: integer) :: integer def search_insert(nums, target) do search(nums, target, 0, length(nums) - 1) end defp search(nums, target, left, right) when left <= right do mid = div(left + right, 2) val = Enum.at(nums, mid) cond do val == target -> mid val < target -> search(nums, target, mid + 1, right) true -> search(nums, target, left, mid - 1) end end defp search(_nums, _target, left, _right), do: left end ``` ```Solution.go func searchInsert(nums []int, target int) int { left, right := 0, len(nums)-1 for left <= right { mid := (left + right) / 2 if nums[mid] == target { return mid } else if nums[mid] < target { left = mid + 1 } else { right = mid - 1 } } return left } ``` ```Solution.java class Solution { public int searchInsert(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; } } ``` ```Solution.js /** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { let left = 0, right = nums.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (nums[mid] === target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; }; ``` ```Solution.kt class Solution { fun searchInsert(nums: IntArray, target: Int): Int { var left = 0 var right = nums.size - 1 while (left <= right) { val mid = left + (right - left) / 2 if (nums[mid] == target) return mid else if (nums[mid] < target) left = mid + 1 else right = mid - 1 } return left } } ``` ```Solution.php class Solution { /** * @param Integer[] $nums * @param Integer $target * @return Integer */ function searchInsert($nums, $target) { $left = 0; $right = count($nums) - 1; while ($left <= $right) { $mid = intdiv($left + $right, 2); if ($nums[$mid] == $target) return $mid; elseif ($nums[$mid] < $target) $left = $mid + 1; else $right = $mid - 1; } return $left; } } ``` ```Solution.py class Solution: def searchInsert(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return left ``` ```Solution.rb # @param {Integer[]} nums # @param {Integer} target # @return {Integer} def search_insert(nums, target) left, right = 0, nums.length - 1 while left <= right mid = (left + right) / 2 if nums[mid] == target return mid elsif nums[mid] < target left = mid + 1 else right = mid - 1 end end left end ``` ```Solution.rkt (define (search-insert nums target) (let loop ((left 0) (right (- (length nums) 1))) (if (> left right) left (let* ((mid (quotient (+ left right) 2)) (val (list-ref nums mid))) (cond [(= val target) mid] [(< val target) (loop (+ mid 1) right)] [else (loop left (- mid 1))]))))) ``` ```Solution.rs impl Solution { pub fn search_insert(nums: Vec<i32>, target: i32) -> i32 { let mut left = 0; let mut right = nums.len() as i32 - 1; while left <= right { let mid = left + (right - left) / 2; if nums[mid as usize] == target { return mid; } else if nums[mid as usize] < target { left = mid + 1; } else { right = mid - 1; } } left } } ``` ```Solution.scala object Solution { def searchInsert(nums: Array[Int], target: Int): Int = { var left = 0 var right = nums.length - 1 while (left <= right) { val mid = left + (right - left) / 2 if (nums(mid) == target) return mid else if (nums(mid) < target) left = mid + 1 else right = mid - 1 } left } } ``` ```Solution.swift class Solution { func searchInsert(_ nums: [Int], _ target: Int) -> Int { var left = 0, right = nums.count - 1 while left <= right { let mid = (left + right) / 2 if nums[mid] == target { return mid } else if nums[mid] < target { left = mid + 1 } else { right = mid - 1 } } return left } } ``` ```Solution.ts function searchInsert(nums: number[], target: number): number { let left = 0, right = nums.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (nums[mid] === target) return mid; else if (nums[mid] < target) left = mid + 1; else right = mid - 1; } return left; } ```
1 parent ffa7cb9 commit f63a759

19 files changed

+270
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# [**35. Search Insert Position**](https://leetcode.com/problems/search-insert-position/description/)
2+
3+
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.
4+
5+
You must write an algorithm with `O(log n)` runtime complexity.
6+
7+
#### **Example 1:**
8+
```md
9+
Input: nums = [1,3,5,6], target = 5
10+
Output: 2
11+
```
12+
13+
#### **Example 2:**
14+
```md
15+
Input: nums = [1,3,5,6], target = 2
16+
Output: 1
17+
```
18+
19+
#### **Example 3:**
20+
```md
21+
Input: nums = [1,3,5,6], target = 7
22+
Output: 4
23+
```
24+
25+
#### **Constraints:**
26+
> - `1 <= nums.length <= 10⁴`
27+
> - `-10⁴ <= nums[i] <= 10⁴`
28+
> - `nums` contains **distinct** values sorted in **ascending** order.
29+
> - `-10⁴ <= target <= 10⁴`
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
int searchInsert(int* nums, int numsSize, int target) {
2+
int left = 0, right = numsSize - 1;
3+
while (left <= right) {
4+
int mid = left + (right - left) / 2;
5+
if (nums[mid] == target) return mid;
6+
else if (nums[mid] < target) left = mid + 1;
7+
else right = mid - 1;
8+
}
9+
return left;
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int searchInsert(vector<int>& nums, int target) {
4+
int left = 0, right = nums.size() - 1;
5+
while (left <= right) {
6+
int mid = left + (right - left) / 2;
7+
if (nums[mid] == target) return mid;
8+
else if (nums[mid] < target) left = mid + 1;
9+
else right = mid - 1;
10+
}
11+
return left;
12+
}
13+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
public class Solution {
2+
public int SearchInsert(int[] nums, int target) {
3+
int left = 0, right = nums.Length - 1;
4+
while (left <= right) {
5+
int mid = left + (right - left) / 2;
6+
if (nums[mid] == target) return mid;
7+
else if (nums[mid] < target) left = mid + 1;
8+
else right = mid - 1;
9+
}
10+
return left;
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
int searchInsert(List<int> nums, int target) {
3+
int left = 0, right = nums.length - 1;
4+
while (left <= right) {
5+
int mid = (left + right) ~/ 2;
6+
if (nums[mid] == target) return mid;
7+
else if (nums[mid] < target) left = mid + 1;
8+
else right = mid - 1;
9+
}
10+
return left;
11+
}
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-spec search_insert([integer()], integer()) -> integer().
2+
search_insert(Nums, Target) ->
3+
search(Nums, Target, 0, length(Nums) - 1).
4+
search(Nums, Target, Left, Right) when Left =< Right ->
5+
Mid = (Left + Right) div 2,
6+
Val = lists:nth(Mid + 1, Nums),
7+
case Val of
8+
Target -> Mid;
9+
_ when Val < Target -> search(Nums, Target, Mid + 1, Right);
10+
_ -> search(Nums, Target, Left, Mid - 1)
11+
end;
12+
search(_, _, Left, _) ->
13+
Left.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
defmodule Solution do
2+
@spec search_insert(nums :: [integer], target :: integer) :: integer
3+
def search_insert(nums, target) do
4+
search(nums, target, 0, length(nums) - 1)
5+
end
6+
defp search(nums, target, left, right) when left <= right do
7+
mid = div(left + right, 2)
8+
val = Enum.at(nums, mid)
9+
cond do
10+
val == target -> mid
11+
val < target -> search(nums, target, mid + 1, right)
12+
true -> search(nums, target, left, mid - 1)
13+
end
14+
end
15+
defp search(_nums, _target, left, _right), do: left
16+
end
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
func searchInsert(nums []int, target int) int {
2+
left, right := 0, len(nums)-1
3+
for left <= right {
4+
mid := (left + right) / 2
5+
if nums[mid] == target {
6+
return mid
7+
} else if nums[mid] < target {
8+
left = mid + 1
9+
} else {
10+
right = mid - 1
11+
}
12+
}
13+
return left
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public int searchInsert(int[] nums, int target) {
3+
int left = 0, right = nums.length - 1;
4+
while (left <= right) {
5+
int mid = left + (right - left) / 2;
6+
if (nums[mid] == target) return mid;
7+
else if (nums[mid] < target) left = mid + 1;
8+
else right = mid - 1;
9+
}
10+
return left;
11+
}
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
var searchInsert = function(nums, target) {
7+
let left = 0, right = nums.length - 1;
8+
while (left <= right) {
9+
let mid = Math.floor((left + right) / 2);
10+
if (nums[mid] === target) return mid;
11+
else if (nums[mid] < target) left = mid + 1;
12+
else right = mid - 1;
13+
}
14+
return left;
15+
};

0 commit comments

Comments
 (0)