leetcode#1:两数之和

简介: leetcode#1:两数之和

描述


Category:algorithms


Difficulty:Easy

Tags:array | hash-table

Companies:adobe | airbnb | amazon | apple | bloomberg | dropbox | facebook | linkedin | microsoft | uber | yahoo | yelp



题目


给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。


你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]


代码

自己的实现方式:暴力法直接遍历

/*
 * @lc app=leetcode.cn id=1 lang=javascript
 *
 * [1] 两数之和
 */
// @lc code=start
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
  for(var i = 0; i < nums.length; i++) {
    var tempNum = target - nums[i];
    for(var j = i + 1; j < nums.length; j++) {
      if ( nums[j] === tempNum) {
        return [i, j];
      }
    }
  }
};
console.log(twoSum([2, 7, 11, 15], 9));
// @lc code=end


测试提交

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9iODJlYWI3YjQ4ZDIyYWRiZmFkMmY5NmI2MTM1NzI2NS9CODM0OTdGNEM2MDQ0MjkwQjI5RTkwN0ZFQzIyRjBBRg.png



提交记录


aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9iODJlYWI3YjQ4ZDIyYWRiZmFkMmY5NmI2MTM1NzI2NS9DMUFFODQ3ODc5RTQ0NTNDQjlCMzRGMzI1QjQ0N0UwQQ.png


执行用时

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9iODJlYWI3YjQ4ZDIyYWRiZmFkMmY5NmI2MTM1NzI2NS83OEYzOEI2MDAzQTc0MDlGQTNFRkM5NjczNkJGODNBQg.png



Using ES6 data structure Map. Time complexity is O(n).

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let map = new Map();
    for(let i = 0; i < nums.length; i ++) {
        if(map.has(target - nums[i])) {
            return [map.get(target - nums[i]), i];
        } else {
            map.set(nums[i], i);
        }
    }
  return [];
};



aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9iODJlYWI3YjQ4ZDIyYWRiZmFkMmY5NmI2MTM1NzI2NS81QUQ4M0VGMTUxRjQ0NkU3OTM2Q0RGMDMxMkQzQUIzRQ.png




Using Object. Time complexity is also O(n).

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
  let hash = {};
  for(let i = 0; i < nums.length; i++) {
    const n = nums[i];
    if(hash[target - n] !== undefined) {
      return [hash[target - n], i];
    }
    hash[n] = i;
  }
  return [];
}

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9iODJlYWI3YjQ4ZDIyYWRiZmFkMmY5NmI2MTM1NzI2NS8wN0IwOUYyMEM5OEU0MDdDODc5Q0U0NDc2MUM5MUQ0Qg.png

对比结果很明显,不得不说一个题目就能暴露自己的很多问题,自己存在的短板,思考问题的角度。



要点学习


array


hash-table:哈希表也被称为散列表,是一种特殊的数据结构,它同数组、栈、链表等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。


算法复杂度:是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。






目录
相关文章
|
8天前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
8天前
|
存储
LeetCode热题 首题 两数之和
LeetCode热题 首题 两数之和
21 1
|
8天前
|
索引 容器
双指针解决leetcode1两数之和
双指针解决leetcode1两数之和
22 0
|
8天前
|
存储 算法 Java
小白刷力扣之两数之和
小白刷力扣之两数之和
|
8天前
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
【Leetcode】两数之和,给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
|
8天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
12 1
|
8天前
|
算法 C语言 C++
|
8天前
leetcode代码记录(有序数组两数之和
leetcode代码记录(有序数组两数之和
15 0
|
8天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
24 0
|
8天前
|
算法
LeetCode-1:两数之和
LeetCode-1:两数之和