题目
思路:用map装两个数的和,value为两个数的下标,遇见相同的和直接退出
AC代码:
package 练习;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.io.*;
import java.util.*;
public class Main{
static Scanner scanner=new Scanner(System.in);
static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) {
int n=scanner.nextInt();
int a[]=new int [n];
for(int i=0;i<n;i++)a[i]=scanner.nextInt();
Map<Integer, Node>map=new HashMap<Integer, Node>();
for(int i=0;i<n-1;i++) {
for(int j=i+1;j<n;j++) {
int num=a[i]+a[j];
if(map.containsKey(num)) {
Node node=map.get(num);
if(i==node.x||j==node.x||i==node.y||j==node.y)continue;
System.out.println("Yes");
System.out.println(i+1+" "+(j+1)+" "+(node.x+1)+" "+(node.y+1));
return;
}else {
Node node=new Node(i, j);
map.put(num,node);
}
}
}
System.out.println("No");
}
static class Node{
int x,y;
public Node(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
}