前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode - 两数之和

leetcode - 两数之和

作者头像
江涛学编程
发布2021-01-28 15:29:49
2800
发布2021-01-28 15:29:49
举报
文章被收录于专栏:江涛的博客江涛的博客

题意

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

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

你可以按任意顺序返回答案。

示例

示例 1:

代码语言:javascript
复制
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

代码语言:javascript
复制
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

代码语言:javascript
复制
输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 103
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

题目出处

链接:https://leetcode-cn.com/problems/two-sum

思路

抓重点就是,在数组 nums 中找两个元素使其与目标值 target 相等,规则是数组 nums 里面的每一个元素只能使用一次,为了让程序更加容易通过,出题人限定了输入的输出答案有且仅有一个,而且不需要你考虑顺序,你只需要返回其下标就好了。

最通用的手段,暴力破解嘛,两层循环分别找出元素中的两个值,如果与目标 target 值吻合就返回下标,退出程序。

代码

代码语言:javascript
复制
/**
 * @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];
      }
    }
  }
};

export default twoSum;

测试

脚本

代码语言:javascript
复制
import twoSum from '../../code/leetcode/1';

describe('test function twoSum:', () => {
  test('test case nums = [3, 3], target = 6', () => {
    const data = twoSum([3, 3], 6);
    expect(data).toEqual([0, 1]);
  });

  test('test case nums = [2,7,11,15], target = 9', () => {
    const data = twoSum([2, 7, 11, 15], 9);
    expect(data).toEqual([0, 1]);
  });

  test('test case nums = [3,2,4], target = 6', () => {
    const data = twoSum([3, 2, 4], 6);
    expect(data).toEqual([1, 2]);
  });
});

结果

代码语言:javascript
复制
 ➜  coding git:(master) ✗ npm run test

> coding@1.0.0 test
> jest

 PASS  test/leetcode/1.test.js
  test function twoSum:
    ✓ test case nums = [3, 3], target = 6 (2 ms)
    ✓ test case nums = [2,7,11,15], target = 9
    ✓ test case nums = [3,2,4], target = 6 (1 ms)

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        0.545 s, estimated 1 s
Ran all test suites.
➜  coding git:(master) ✗

思考

  • 有没有更好的解法
  • 存在多个有效答案是什么情况?
  • 按从小到大的顺序返回是什么情况?
  • 如果改成和为目标值的三个整数呢?

这里笔者象征性地提了几个问题,供读者们阅读后思考,挖坑不填坑哈哈,欢迎在留言下方评论,分享你的见解和想法。

说明

本文首发于 GitHub 仓库https://github.com/ataola/coding,线上阅读地址:https://zhengjiangtao.cn/coding/,转载请注明出处,谢谢!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江涛学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 示例
    • 示例 1:
      • 示例 2:
        • 示例 3:
        • 提示:
        • 题目出处
        • 思路
        • 代码
        • 测试
          • 脚本
            • 结果
            • 思考
            • 说明
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档