hashのアルゴリズムへの応用

2040 ワード

最初に現れなかった正数
配列を指定し、1からnまで、配列の最初の正数を見つけます.
例:[1,2,0]が与えられると、3が返される.[3,4,-1,1]が与えられると、2が返される.
注意:
アルゴリズムはO(n)の時間的複雑さと線形空間的複雑さを必要とする.
入力フォーマット
1行目は整数n(n≦106)を入力し、次の行は配列A[n]を入力する.
出力フォーマット
最初に現れなかった正数を出力します.
サンプル入力
5
4 2 0 1 4

サンプル出力
3

ヒント:hash
コード:
import java.util.HashSet;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int num=in.nextInt();
		int []a=new int[num];
		HashSet set=new HashSet();
		for(int i=0;i

二つの数の和
1つの配列numberiを与え、2つの数を見つけて、彼らの和が1つの与えられた数値targetになるようにします.
そのうち:number[index 1]+number[index 2]=target.
注意:index 1はindex 2より小さく、0ではありません.各入力のセットに一意の解のセットしかないと仮定します.
例えば、配列[2,7,11,15]およびtarget=9の場合、index 1の値は1であり、index 2の値は2である.
入力フォーマット
最初の行には整数n(1≦n≦500)が入力され、次の2行にはnnn個の整数からなる配列numberi(0≦numberi≦1000)と整数target(0≦target≦1000)が入力される.
出力フォーマット
1行をスペースで区切った2つの整数index 1とindex 2を出力します.注意、下付きは1から始まります.
サンプル入力
3
5 75 25
100

サンプル出力
2 3

コード:
import java.util.HashMap;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int num=in.nextInt();
		int []a=new int[num];
		for(int i=0;i num_map = new HashMap<>();
				for (int i = 0; i < numbers.length; i++) {
					if (num_map.containsKey(numbers[i])) {
						int index = num_map.get(numbers[i]);
						int[] result = { ++index, ++i };
						return result;
					} else {
						num_map.put(target - numbers[i], i);
					}
				}
			}
			return null;
		}


}