1.两数之和

题目描述

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

​来源:力扣(LeetCode)

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

示例

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

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

解题思路

方法一:暴力方法

    通过使用两重循环,内外层分别去遍历这个数组,使得两值之和等于target

    public int[] twoSum(int[] nums, int target) {

      int i = 0;

       int j = nums.length;

       for ( ; i < j; i++) {

           int k = i + 1;

           for (; k < j; k++) {

               int temp = nums[i] + nums[k];

               if (temp == target) {

                   return new int[]{i, k};

               }

           }

       }

       return new int[2];

   }

方法二:一次哈希法

    通过使用哈希表(key为数组中的值,value为下标)存储已经访问过的数据。当遍历到一个数据的时候,判断哈希表中是否存在target-nums[i]值,存在,则直接返回结果,不存在,将value值存入到哈希表中。

   public int[] twoSum(int[] nums, int target) {

           Map<Integer, Integer> map = new HashMap<>();

           for (int i = 0; i < nums.length; i++) {

               int temp = target - nums[i];

               if (map.containsKey(temp)) {

                   return new int[]{i, map.get(temp)};

               }

               map.put(nums[i], i);

           }

           throw new IllegalArgumentException("No solution!");

       }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 前言 >秋招的结束,面试了大大小小的公司,最大的问题在于算法上。所以打算坚持在leetcode打卡,看看到底能...
    Timestamp阅读 203评论 0 0
  • 1.两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样...
    Gunther17阅读 1,062评论 2 6
  • 两数之和(two-sum) 这是LeetCode上一道十分经典的题目,存在多种解法,难度是简单,但后面难度更高的三...
    ZenMoto阅读 536评论 0 0
  • 题目: 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回...
    12313凯皇阅读 530评论 0 0
  • 我们不去说那些很特别的人,我们只讲普通人,评价一个人的标准是什么?很实际的来说就是钱,腰包鼓鼓做什么事情都很有底气...
    少匠阅读 567评论 1 3