Leetcode前端必会系列:两数之和

68 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

引言

算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。

题目描述

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

示例 1:

输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

输入: nums = [3,2,4], target = 6
输出: [1,2]

示例 3:

输入: nums = [3,3], target = 6
输出: [0,1]

分析

根据题目的分析,我们知道题目需要完成找出满足两个数的和等于目标数字。根据题目设计的规则,我们可以基于for循环完成就可以解决问题了

  1. 从第一个元素i开始一层循环
  2. 下标j总是从i的后面开始遍历
  3. 判断两个下标的元素是否和等于目标元素,如果等于返回下标
  4. 遍历结束没找到,则表示失败了。

解答

   /**

 * @param {number[]} nums

 * @param {number} target

 * @return {number[]}

 */

var twoSum = function(nums, target) {

  //返回两个数字和的下标

  for(let i=0;i<nums.length;i++) {

    for(let j=i+1;j<nums.length;j++) {

      if(nums[i]+nums[j]===target) return [i,j]

    }

  }

};

由于设计是数组数据结构,通过分析知:算法的时间复杂度是o(n)。空间复杂度是o(1)。整体设计思路还是比较简洁容易的。

总结

通过对两数之和的讲解,大家学到了如何利用进行问题的解决。通过for循环巧妙计算可以优雅的在低时间和空间复杂度下完成任务。