1.两数之和

作者: 第四单元 | 来源:发表于2018-03-30 19:41 被阅读7次

题目

给定一个整数数列,找出其中和为特定值的那两个数。

你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

示例:

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

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

思路

思路一:在leetcode上这道题用两重循环也能AC,但有没有更优的方案呢?
思路二:对于A+B=C,B = C - A。我们先确定A,再从数组中找B。而常用的查找方法
有二分查找、Hash等。这个题不适用二分查找,因为二分查找需要先排序,而本题要求
返回两个下标,排序后下标就乱了,否则需要专门想其他办法来维护原下标,不划算。
那么考虑HashMap。key为元素的值,value为下标。把数组元素依次put进map,每次计算
diff = target - nums[i],在map中查找diff,查找到则结束,否则把nums[i] i加入map。

代码

import java.util.Scanner;
import java.util.Arrays;
import java.util.HashMap;

public class Solution {
    public int[] twoSum(int[] nums,int target) {
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();

        for(int i = 0; i < nums.length; i++) {
            int diff = target - nums[i];
            if(map.containsKey(diff)) {
                return new int[] {map.get(diff),i};
            } else {
                map.put(nums[i],i);
            }
        }
        return null;
    }

      //测试
    public static void main(String[] args) {
        Solution solution = new Solution();
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        int target = scanner.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++)
            arr[i] = scanner.nextInt();
        // System.out.println(solution.binarySearch(arr,11));
        System.out.println(Arrays.toString(solution.twoSum(arr,target)));
    }


相关文章

  • 1. 两数之和

    https://leetcode-cn.com/problems/two-sum/description/给定一个...

  • 1. 两数之和

    内容 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素...

  • 1. 两数之和

    20180919-摘抄自1. 两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每...

  • 1. 两数之和

    1、暴力法,求target-num[current]是否满足 2、哈希表

  • 1. 两数之和

    代码 分析 主要是利用map集合来存储值,存储的是下一下要找的值和当前的索引,然后找到的时候就可以知道这两个索引

  • 1. 两数之和

    一、题目原型: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同...

  • 1.两数之和

    题目: 给定一个整数数列,找出其中和为特定值的那两个数。 你可以假设每个输入都只会有一种答案,同样的元素不能被重用...

  • 1.两数之和

    leetcode算法学习,打算每日1篇 自己写的代码太low就不上了,主要是对最优代码的注释和自己的小小理解 题目...

  • 1. 两数之和

    LeetCode 的算法题 PHP解法记录 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假...

  • 1. 两数之和

    https://leetcode-cn.com/problems/two-sum/description/给定一个...

网友评论

    本文标题:1.两数之和

    本文链接:https://www.haomeiwen.com/subject/jhtwcftx.html