hashのアルゴリズムへの応用
2040 ワード
最初に現れなかった正数
配列を指定し、1からnまで、配列の最初の正数を見つけます.
例:
注意:
アルゴリズムはO(n)の時間的複雑さと線形空間的複雑さを必要とする.
入力フォーマット
1行目は整数n(n≦106)を入力し、次の行は配列
出力フォーマット
最初に現れなかった正数を出力します.
サンプル入力
サンプル出力
ヒント:hash
コード:
二つの数の和
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から始まります.
サンプル入力
サンプル出力
コード:
配列を指定し、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;
}
}