两数之和

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

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

解答

一、暴力法 时间复杂度:O(n²)

思路:使用双层for循环,外层遍历数组,寻找当前元素与target的差值,内层循环遍历整个数组,寻找有没有值与差值相同。如果找到,返回两个元素的下标。

let twoSum = function(nums, target) {for (let i = 0; i < nums.length; i++) {let d_value = target - nums[i];for (let j = i + 1; j < nums.length; j++) {if(nums[j] === d_value)return [i,j];}}
};console.log(twoSum([1,2,3,4,5],8))

运行结果:

二、数组法 时间复杂度:O(n)

思路:使用一层循环遍历整个数组,首先计算当前元素与target的差值d_value ,然后以d_value 为下标到数组result中寻找。如果有值,返回下标;如果没有找到,将当前元素存入result中(存入下标和值均为d_value)。

在这个方法中,最终的result数组中,有很多空元素位置。只有以nums数组中的元素为下标的地方有值,且值为nums数组中的元素本身。

let twoSum = function(nums, target) {let result = [];for(let i=0;i<nums.length;i++){let d_value  = target - nums[i];if(result[d_value ] !== undefined){return [result[d_value ],i];}result[nums[i]] = i;}
};console.log(twoSum([13,26,4,14,24],28))

运行结果:

三、ES6 新语法,Map 时间复杂度:O(n)

一个Map类似于一个对象,但相对于对象更加强大,其键可以是多种类型 ES6新语法

通过map可以更加方便的设置、获取、比较值

let twoSum = (nums, target) => {let targetMap = new Map();for (let i = 0; i < nums.length; i++) {const key = target - nums[i];if (targetMap.has(key)) {return [targetMap.get(key), i]}targetMap.set(nums[i], i)}
};console.log(twoSum([13,26,4,14,24],28));

运行结果:

LeetCode:每日一题(2020.4.6)相关推荐

  1. Leetcode每日一题2020.11.13第328题:奇偶链表

    328.奇偶链表 题目描述 思路.算法及代码实现 方法:分离节点后合并 如果链表为空,则直接返回链表. 对于原始链表,每个节点都是奇数节点或偶数节点.头节点是奇数节点,头节点的后一个节点是偶数节点,相 ...

  2. LeetCode 每日一题 42. 接雨水 详细多种题解 C++描述

    LeetCode 每日一题 42. 接雨水 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,一起加油吧~ 难度 困难 2020.04.04每日一题 ...

  3. Leetcode每日一题——思路小记

    文章目录 LeetCode每日一题 golang T15 2020.6.12 三数之和,双指针的运用 T70 2020.6.13 斐波那契数列 T1014 2020.6.17 最佳观光:双指针,计算公 ...

  4. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  5. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)

    思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...

  6. 【LeetCode每日一题】1723. 完成所有工作的最短时间

    [LeetCode每日一题]1723. 完成所有工作的最短时间 [1] 1723. 完成所有工作的最短时间 [2] 473. 火柴拼正方形 [1] 1723. 完成所有工作的最短时间 题目: 给你一个 ...

  7. leetcode每日一题--雀巢原理;抽屉算法;Quorum机制;分布式应用

    leetcode每日一题 539. 最小时间差 示例 1: 输入:timePoints = ["23:59","00:00"] 输出:1 示例 2: 输入:ti ...

  8. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  9. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  10. leetcode每日一题·救生艇问题(Python)

    leetcode每日一题·救生艇问题(Python) 问题描述 题目入口 题目思路 首先分析问题,一个船最多坐两人,因此我们可以把这个问题看作两两组合的问题,并且如果最重的那个人和最轻的人加起来大于l ...

最新文章

  1. matlab语言unique,Matlab的unique函数的C++实现
  2. 详细设计说明书读后感_专利申请详细步骤是怎样的,要多久时间
  3. pandas 合并数据
  4. 【项目实战】mybatis +vue.js 前后端交互批量删除
  5. WPF [调用线程无法访问此对象,因为另一个线程拥有该对象。] 解决方案以及如何实现字体颜色的渐变...
  6. leetcode —— 1079. 活字印刷
  7. vue-cli本地的一个websocket
  8. 黑龙江省:到2025年将建成5G基站11.4万个
  9. Daily Scrum M2 11-5
  10. 凸优化第三章凸函数 3.4 拟凸函数
  11. Java语言实现文本转语音
  12. ios弱网测试_弱网测试方法整理
  13. MATLAB算法实战应用案例精讲-【图像处理】缺陷检测(补充篇)(附matlab实现代码)
  14. 面试官,你到底安的什么心?
  15. SpringBoot实现通过邮箱找回密码功能
  16. [机器学习] 训练过程中的train,val,test的区别
  17. hive之窗口函数理解与实践
  18. python读取枚举_一文读懂Python 枚举
  19. 华为traffic访问列表及Qos基本配置
  20. Makefile-----GNU

热门文章

  1. 18.pika 安装
  2. 23. Linux 主机上的用户信息传递
  3. 9. JavaScript 事件参考手册
  4. Android中设置显示文本,TextView控件的使用(Android设置文本显示格式)
  5. 《数学之美》—矩阵运算和文本处理中的两个分类问题
  6. css3中的transform中的3d变换:translatez()与transform-origin-z()的区别
  7. mysql插入数据显示:Incorrect datetime value: '0000-00-00 00:00:00'
  8. C#读取网络流,读取网络上的js文件
  9. javascript中数组遍历问题
  10. 图解 TCP IP 协议:三次握手、四次挥手