您当前的位置: 首页 >  Java

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

发布时间:2022-02-28 16:42:08 ,浏览量:0

目录
  • 1、indexOf
    • 版本一
    • 版本二
  • 2、双for实现
1、indexOf 版本一
function twoSum(nums, target) { let i = 0, len = nums.length; for (; i < len; i++) if (nums.indexOf(target - nums[i]) > -1) return [i, nums.indexOf(target - nums[i])]; } console.log(twoSum([2, 7, 11, 15], 9)); // [0, 1] 

☺☺☺☺☺☺☺

存在缺陷 var nums = [2, 7, 11, 15, 7, 3, 6]; var target = 9; 若用indexOf方法,则输出[0, 1],因为return打断了循环。若解决return打断循环的问题,则输出[0, 1]和[5, 6]缺少[0, 4]。版本二已完善此问题。

版本二
function sueForPeace(nums, target) { let obj = {}, arr = []; for (i = 0; i < nums.length; i++) { let existence = nums.indexOf(target - nums[i]), isBoolean = existence > -1; if (isBoolean) obj[i + existence] = [existence, i]; } for (const key in obj) { if (Object.hasOwnProperty.call(obj, key)) arr.push(obj[key]); } return arr; } console.log(sueForPeace([2, 7, 11, 1, 5, 30, 6, 3, 9, 8], 9)); // [[0, 1],[3, 9],[6, 7]] 

☺☺☺☺☺☺☺

使用对象属性名称唯一性去除和相等的下标值。 第一步 定义变量obj和arr。obj的作用是存储唯一值,arr是最终返回的下标值。 第二步 对nums.indexOf(target - nums[i])的理解,比如第一次循环的结果是nums.indexOf(7),indexOf方法会到数组nums中寻找是否存在7。如果存在,把7的下标返回,否则返回-1。再使用得到的结果与-1比较即可知道数组是否有两个值相加等于target的值。 第三步 使用下标相加作为obj的属性名存储对应下标数组值。因为循环第二个对应下标时会再次存储下标,此时下标已经颠倒。所以在第二次匹配时把下标反过来写即可得到第一次匹配的顺序。 第四步 使用for in循环把obj对应的值push到arr数组中即可大功告成。

2、双for实现
function towSum(nums, target) { let len = nums.length; for (let i = 0; i < len; i++) { for (let j = i + 1; j < len; j++) if (nums[i] + nums[j] == target) return [i, j]; } } } console.log(towSum([3, 2, 6, 4], 6)); // [1, 3] 

☺☺☺☺☺☺☺

不推荐使用双for的方式。

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3677s