https://leetcode-cn.com/problems/two-sum/solution/jsshi-yong-map-by-hen-ji-shi/
map hashmap
image.png

  1. function twoSum(nums: number[], target: number): number[] {
  2. let numsMap= new Map()
  3. for(let i =0,len = nums.length;i<len;i++){
  4. let index = numsMap.get(target-nums[i])
  5. if(index !== undefined){
  6. return [index,i]
  7. }
  8. numsMap.set(nums[i],i)
  9. }
  10. };

二分法

有序数组 无重复元素

  1. // (版本一)左闭右闭区间
  2. var search = function(nums, target) {
  3. let l = 0, r = nums.length - 1;
  4. // 区间 [l, r]
  5. while(l <= r) {
  6. let mid = (l + r) >> 1;
  7. if(nums[mid] === target) return mid;
  8. let isSmall = nums[mid] < target;
  9. l = isSmall ? mid + 1 : l;
  10. r = isSmall ? r : mid - 1;
  11. }
  12. return -1;
  13. };
  14. // (版本二)左闭右开区间
  15. var search = function(nums, target) {
  16. let l = 0, r = nums.length;
  17. // 区间 [l, r)
  18. while(l < r) {
  19. let mid = (l + r) >> 1;
  20. if(nums[mid] === target) return mid;
  21. let isSmall = nums[mid] < target;
  22. l = isSmall ? mid + 1 : l;
  23. // 所以 mid 不会被取到
  24. r = isSmall ? r : mid;
  25. }
  26. return -1;
  27. };

备注 :

  • number >> 位数 位运算,向右移几位 这里为1,相当于抹去了最后一位
    • 3>>1 就是 11 => 1
    • 4>>1 就是 100 =>10 就是2
    • 方便取中位数 除以2 向下取整