leetcode-数组-1-两数之和

1. 两数之和

描述

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

示例 1

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

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

思路 1

  • 暴力法

详解 1

  • 1.遍历每个元素 x
  • 2.并查找是否存在一个值与 target - x 相等的目标元素。

解法 1

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const 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]
              }
          }
      }
};

复杂度分析 1

  • 时间复杂度: O( n^2 )
  • 空间复杂度:O(1)

思路 2

  • 利用Map

代码

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

复杂度

  • 时间复杂度:O(n)。只遍历了包含有 n 个元素的列表一次
  • 空间复杂度:O(n)。上述解法中,申请了大小为 的空间,空间复杂度跟数字的个数 n 线性相关

   转载规则


《leetcode-数组-1-两数之和》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
leetcode-数组-26-删除排序数组中的重复项 leetcode-数组-26-删除排序数组中的重复项
26. 删除排序数组中的重复项描述 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
2020-02-20
下一篇 
Promise处理异常 Promise处理异常
promise如何进行异常处理 参照promise的文档我们可以在reject回调和catch中处理异常。但是promise规定如果一个错误在reject函数中被处理,那么promise将从异常常态中恢复过来。这意味着接下来的then方法将
2020-02-19
  目录