BluePen BluePen
  • Jenkins
  • OS
  • 算法
随笔
分类
标签
归档
关于
留言板
GitHub (opens new window)

Alex

一个好人
  • Jenkins
  • OS
  • 算法
随笔
分类
标签
归档
关于
留言板
GitHub (opens new window)
  • leetcode

    • 哈希

      • 两数之和
        • 题目描述
        • 解法
        • 总结
    • 字符串操作

    • 数字操作

    • 双指针

    • 递归

    • 链表

    • 动态规划

    • 二分法

  • interview

  • well_known_algo

  • algo
  • leetcode
  • 哈希
Alex
2019-06-16
目录

两数之和

-> 题目描述

Two Sum

给出一个整数数组,返回数组中两个元素满足相加等于一个目标数字的索引。
可以限定只存在唯一解,且不会使用相同的元素两次(即数组中不存在两个相同的元素)

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,

return [0, 1].

javascript:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const twoSum = function(nums, target) {

}
1
2
3
4
5
6
7
8

From leetcode No.1 Easy (opens new window)

-> 解法

点击查看
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const twoSum = function(nums, target) {
    const map = {}
    
    for(let i=0; i<nums.length; i++){
        map[nums[i]] = i
    }
    for(let i=0; i<nums.length; i++){
    	const index = map[target-nums[i]]
        if(index !== undefined && index !== i) //index != i 特殊情况
            return [i, index]
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

-> 总结

两层暴力循环的解法肯定是不推荐的。 但凡是寻找值是否存在,哈希表肯定比循环快。
这里用到哈希的思想,第一步构建哈希表,第二步确认索引。
上述解法用到了两次单循环,参考提交答案最快的解决只用了一次循环。 这里是充分利用了限定条件:存在唯一解,同一元素不会使用两次。
改进如下:

点击查看
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const twoSum = function(nums, target) {
    const map = {}
    
    for(let i=0; i<nums.length; i++){
        const index = map[target-nums[i]]
        if(index !== undefined && index !== i)
            return [i, index]
        map[nums[i]] = i
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
编辑此页 (opens new window)
更新于: 2019-06-16 11:33
最长共同前缀

最长共同前缀→

Copyright © 2019-2022 | yxxy | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式