码迷,mamicode.com
首页 > 其他好文 > 详细

两数之和

时间:2018-05-18 20:40:54      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:tin   out   contains   ann   line   sum   必须   str   printf   

问题描述

给定一个数组
number\(_i\),找到两个数,使得他们的和为一个给定的数值 target。
其中:
number[index\(_1\)]+number[index\(_2\)]==target。
注意:index\(_1\)必须小于index\(_2\)且不能为0。
假设每一组输入只有唯一的一组解。
例如:
对于数组[2,7,11,15] 和 target=18,index\(_1\)的值为 2,index\(_2\)的值为 3。

输入格式

第一行输入一个整数 n (1≤n≤500),接下来的两行分别输入 n 个整数组成的
数组 number\(_i\) (0 ≤ number\(_i\) ≤1000) 和一个整数 target (0 ≤ target ≤ 1000)。

输出格式

输出一行由空格分隔的两个整数 index\(_1\) 和 index\(_2\)
注意,下标从 1 开始。

代码

package javaexam;

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

public class TwoSum
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        
        int n = input.nextInt();
        int target;
        int[] num = new int[n];
        HashMap map = new HashMap();
        
        for(int i = 0; i < n; ++i)
        {
            num[i] = input.nextInt();
        }
        
        target = input.nextInt();
        
        for(int i = 0; i < n; ++i)
        {
            if(map.containsKey(target - num[i]))
            {
                // HashMap 搜索时间复杂度为O(1)
                System.out.printf("%d %d", map.get(target - num[i]), i + 1); // printf格式化输出函数
                break;
            }
            map.put(num[i], i + 1);
        }
    }
}

样例测试

4
2 7 11 15
18
2 3

两数之和

标签:tin   out   contains   ann   line   sum   必须   str   printf   

原文地址:https://www.cnblogs.com/narisu/p/9057879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!