https://leetcode-cn.com/problems/two-sum/solution/jsshi-yong-map-by-hen-ji-shi/
map hashmap
function twoSum(nums: number[], target: number): number[] {
let numsMap= new Map()
for(let i =0,len = nums.length;i<len;i++){
let index = numsMap.get(target-nums[i])
if(index !== undefined){
return [index,i]
}
numsMap.set(nums[i],i)
}
};
二分法
有序数组 无重复元素
// (版本一)左闭右闭区间
var search = function(nums, target) {
let l = 0, r = nums.length - 1;
// 区间 [l, r]
while(l <= r) {
let mid = (l + r) >> 1;
if(nums[mid] === target) return mid;
let isSmall = nums[mid] < target;
l = isSmall ? mid + 1 : l;
r = isSmall ? r : mid - 1;
}
return -1;
};
// (版本二)左闭右开区间
var search = function(nums, target) {
let l = 0, r = nums.length;
// 区间 [l, r)
while(l < r) {
let mid = (l + r) >> 1;
if(nums[mid] === target) return mid;
let isSmall = nums[mid] < target;
l = isSmall ? mid + 1 : l;
// 所以 mid 不会被取到
r = isSmall ? r : mid;
}
return -1;
};
备注 :
- number >> 位数 位运算,向右移几位 这里为1,相当于抹去了最后一位
- 3>>1 就是 11 => 1
- 4>>1 就是 100 =>10 就是2
- 方便取中位数 除以2 向下取整