File tree Expand file tree Collapse file tree 2 files changed +25
-19
lines changed
src/0035.Search-Insert-Position Expand file tree Collapse file tree 2 files changed +25
-19
lines changed Original file line number Diff line number Diff line change @@ -39,23 +39,29 @@ Output: 0
39
39
40
40
## 题解
41
41
### 思路1
42
- 题意是让你从一个没有重复元素的已排序数组中找到插入位置的索引。因为数组已排序,所以我们可以想到二分查找法,因为查找到的条件是找到第一个等于或者大于 ` target ` 的元素的位置,所以二分法略作变动即可。
42
+
43
+ - 直接二分查找小于等于目标值的第一个位置。
44
+ - 如果nums[ l] >= target,说明找到了target或者数组中所有元素都比target小,则返回l
45
+ - 否则说明数组所有元素都比target大,此时l一定是0,故返回l。
46
+ 时间复杂度
47
+
43
48
``` go
44
49
func searchInsert (nums []int , target int ) int {
45
- left := 0
46
- right := len (nums) - 1
47
- mid := (right + left) >> 1
48
- for left <= rig
8000
ht {
49
- if target <= nums[mid] {
50
- right = mid - 1
51
- } else {
50
+ left , right := 0 , len (nums)-1
51
+ for left < right {
52
+ mid := left + (right-left)/2
53
+ if nums[mid] < target {
52
54
left = mid + 1
55
+ } else {
56
+ right = mid
53
57
}
54
- mid = (right + left) >> 1
55
-
58
+ }
59
+ if target > nums[left] {
60
+ left++
56
61
}
57
62
return left
58
63
}
64
+
59
65
```
60
66
### 思路2
61
67
Original file line number Diff line number Diff line change 1
1
package Solution
2
2
3
3
func searchInsert (nums []int , target int ) int {
4
- left := 0
5
- right := len (nums ) - 1
6
- mid := (right + left ) >> 1
7
- for left <= right {
8
- if target <= nums [mid ] {
9
- right = mid - 1
10
- } else {
4
+ left , right := 0 , len (nums )- 1
5
+ for left < right {
6
+ mid := left + (right - left )/ 2
7
+ if nums [mid ] < target {
11
8
left = mid + 1
9
+ } else {
10
+ right = mid
12
11
}
13
- mid = (right + left ) >> 1
14
-
12
+ }
13
+ if target > nums [left ] {
14
+ left ++
15
15
}
16
16
return left
17
17
}
You can’t perform that action at this time.
0 commit comments