【算法】两数之和

小鱼儿 2022-05-16 12:08 275阅读 0赞

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

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

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

1 暴力破解

  1. let nums = [2, 7, 11, 15];
  2. let tarhet = 9;
  3. var twoSum = function(nums, target) {
  4. for(let i = 0; i < nums.length ; i++){
  5. let temp = target - nums[i];
  6. for(let j = i + 1 ; j < nums.length ; j++){
  7. if(temp === nums[j]){
  8. return [i,j];
  9. }
  10. }
  11. }
  12. };
  13. nums = [3,2,4]
  14. tarhet = 6;
  15. let start = new Date();
  16. let t = twoSum(nums,tarhet);
  17. let end = new Date();
  18. console.log(end - start);
  19. console.log(t);

复杂度分析

1、时间复杂度: O(n²)
2、空间复杂度:O(1)


两遍哈希表

  1. var twoSum2 = function(nums, target) {
  2. const m = new Map();
  3. for(let i = 0; i < nums.length ; i++){ m.set(nums[i],i); }
  4. for(let j = 0 ; j < nums.length ; j++){ let temp = target - nums[j]; // console.log(m,m.get(temp)); if(m.has(temp) && m.get(temp) !== j){ return [j,m.get(temp)] }
  5. }
  6. };
  7. start = new Date();
  8. t = twoSum2(nums,tarhet);
  9. end = new Date();
  10. console.log(end - start);
  11. console.log(t);

一遍哈希表

这是一种非常巧妙的思路。
1、先计算差值
2、寻找差值
3、保存当前值到Hash中

这样做,巧妙的利用了一个值不能被使用两次:
1、避免了同一个值被两次使用。
2、避免了不必要的遍历

return 的值也是很有意思,因为是减法,要把i放在数组的后一位

  1. var twoSum3 = function(nums, target) {
  2. const m = new Map();
  3. for(let i = 0; i < nums.length ; i++){
  4. let temp = target - nums[i];
  5. if(m.has(temp)){
  6. return [m.get(temp),i]
  7. }
  8. m.set(nums[i],i);
  9. }
  10. }
  11. start = new Date();
  12. t = twoSum3(nums,tarhet);
  13. end = new Date();
  14. console.log(end - start);
  15. console.log(t);

发表评论

表情:
评论列表 (有 0 条评论,275人围观)

还没有评论,来说两句吧...

相关阅读

    相关 之和

    定一个整数数组 **`nums`**和一个目标值 **`target`**,请你在该数组中找出和为目标值的那 **两个** 整数,并返回他们的数组下标。 你可以假设每种...

    相关 之和

    两数之和 1、题目 > 题目要求 给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下

    相关 之和

    题目描述 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 ind

    相关 之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能

    相关 之和

    题目: 给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应

    相关 之和

    > 题目: > 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 > 你可以假设每种输入只会

    相关 之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不

    相关 之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能