做一道算法题,1. 两数之和

摘自leecode,链接: https://leetcode-cn.com/problems/two-sum/.

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

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

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

版本一:暴力解法,使用两个循环,还有值相同的情况单独处理

运行状况:
执行用时:524 ms
内存消耗:41.8 MB

  var twoSum = function(nums, target) {
    
    
      let indexList = []
      let isFind = false
      if (nums.length == 0) {
    
    
        return
      }
      if (nums.length > 0) {
    
    
        nums.map((item, index) => {
    
    
          let _nums = nums.slice(index + 1)
          let _target = target - item
          _nums.length > 0 && _nums.map((ele, eIdx) => {
    
    
            if (ele == _target) {
    
    
              nums.splice(index, 1, '')
              let lastIndex = nums.indexOf(ele)
              if (isFind) return
              indexList = [index, lastIndex]
              isFind = true
            }
          })
        })
      }
      return indexList
    };

版本二:使用pop方法避免值重复的情况

运行状况:
执行用时:132 ms
内存消耗:32.8 MB

扫描二维码关注公众号,回复: 17008347 查看本文章
 var twoSum = function(nums, target) {
    
    
      let indexList = []
      if (nums.length == 0) {
    
    
        return
      }
      if (nums.length > 0) {
    
    

        while (indexList.length <= 0) {
    
    
          let _target = nums.pop()
          console.log(nums, _target, nums.indexOf(target - _target))
          if (nums.indexOf(target - _target) > -1) {
    
    
            indexList = [nums.indexOf(target - _target), nums.length]
          }
        }
      }
      return indexList
    };

如有问题请与我联系~

欢迎接入QQ群~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37617413/article/details/106873765