-
Notifications
You must be signed in to change notification settings - Fork 0
/
35_搜索插入位置.js
63 lines (54 loc) · 1.41 KB
/
35_搜索插入位置.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
// 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
// 你可以假设数组中无重复元素。
// 示例 1:
// 输入: [1,3,5,6], 5
// 输出: 2
// 15.25% 双指针
// var searchInsert = function(nums, target) {
// let l = 0;
// let r = nums.length-1;
// while(nums[l]<target && nums[r] > target){
// l++;
// r--;
// }
// if(nums[l]>=target){
// return l
// }
// if(nums[r]<target){
// return r+1
// }
// if(nums[r] == target){
// return r
// }
// };
//正常思路
// var searchInsert = function(nums, target) {
// if(target>nums[nums.length-1]) return nums.length
// for(let i = 0;i<nums.length;i++){
// if(target<=nums[i]){
// return i
// }
// }
// };
let searchInsert = function(nums, target) {
let left = 0 ;
let right = nums.length-1;
while(left<=right){
let middle = ~~((left + right)/2);//~按位取反运算符(二进制取反) ~~可以用来取整
if(nums[middle] === target){
return middle
}else if(nums[middle] < target){
left = middle + 1;
}else if(nums[middle] > target){
right = middle-1;
}
console.log(left,right,middle)//0,3 1
}
return left
};
console.log(searchInsert([1,3,5,6],2))