• 两数之和


    题意

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

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

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

    示例

    示例 1:

    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
    

    示例 2:

    输入:nums = [3,2,4], target = 6
    输出:[1,2]
    

    示例 3:

    输入: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 值吻合就返回下标,退出程序。

    代码

    /**
     * @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;
    

    测试

    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]);
      });
    });
    

    思考

    • 有没有更好的解法

    • 存在多个有效答案是什么情况?

    • 按从小到大的顺序返回是什么情况?

    • 如果改成和为目标值的三个整数呢?

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

    说明

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

  • 相关阅读:
    LeetCode:Container With Most Water
    c#编写的基于Socket的异步通信系统
    关于Thread类中三个interrupt方法的研究与学习(转)
    使用svnkit 的相关实例及相关问题汇总
    创业早期,联合创始人如何避免窝里反?(转)
    程序员解决问题的60个策略(转)
    码农和程序员之间的5个关键差异(转)
    LayoutInflater的使用
    2014年中国95家企业入围世界500强,超日本
    How to get the source code of the chromium of the specified revision
  • 原文地址:https://www.cnblogs.com/cnroadbridge/p/14269678.html
Copyright © 2020-2023  润新知