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


刷题系列一:

注:题型出自leet-code 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]

咋眼一看还是挺简单的,后来我才知道我还是太年轻了,下面给出我的几个方案参考一下:

方案一:(前端人员的第一反应)

var towSum = function(nums, target){
  for(let i=0, len = nums.length; i<len; i++) {
    for(let j = i+1; j < nums.length; j++) {
      if(nums[i] + nums[j] == target) {
        return [i, j]
      }
    }
  }
}

2个for循环遍历后一个一个相加得到想要的值,要是这是一个你自己程序中的一个方法,那还行,但是如果这是一道面试题的话,显然不是面试官想要的答案,因为从时间复杂度上讲,O(n)的时间复杂度是不可能被接收的,而且也不满足题型的要求(数组中同一个元素不能使用两遍),如果数据多,这里不知道被用了多少遍了

方案二:

通过es6中Map()方法暂存数据

var towSum = function(nums, target){
    let map = new Map();for (let i in nums) {
        map.set(nums[i], i)
     }
     for (let j = 0; j < nums.length - 1; j++) {
         if (map.has(target - nums[j]) && map.get(target - nums[j]) != j) {
        return [j, +map.get(target - nums[j])] } } }

通过map中的has方法找到目标与其它元素的差值,但是我还是觉得给map赋值的循环可以改进一下,于是就有了下面的;

方案三:

直接通过对象的方式暂存数据

var towSum = function(nums, target){
  let obj = {};
  for(let i=0, len=nums.length; i< len; i++){
    let mult = target - nums[i];
    if(mult in obj){
      return [obj[mult], i];
    }
    obj[nums[i]] = i;
  }
}

出于这种对象的灵感,我想到了用数组的indexOf()方法来查找值,于是就有了下面的

方案四:

var towSum = function(nums, target){
  for(let i=0, len = nums.length; i< len; i++) {
    if(nums.indexOf(target - nums[i]) > -1 ) {
      return [i, nums.indexOf(target - nums[i])]
    }
  }
}

 

小结:

以上的方法仅供大家参考,可能还会有更多更好的方案,欢迎大家留言交流!有时候我们在看待一些问题的时候,往往会局限在自己的小思维里面,总是觉得自己脑海的第一感觉就是最优解,但往往都不是,人在不逼自己一把,你都不知道你原来可以写出更多更好的方法来,所以,要跳出自己的思维,多去尝试,获取会有意想不到的收获!

 

注明:原创不易,如需转载,请注明出处!谢谢!

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。 php 获取两个给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数 用js方法给定一个整数数组nums和一个目标值target,在该数组中找出和为目标值的那两个整数,并返回他们的下标 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 算法题一(给定一个整数数组和一个目标值,请你在该数组中找出和为目标值的那两个整数的索引) 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9 题1:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM