思路出了问题,一直觉得判断一个数是不是关键数的时候,要和除了这个数以外的每一个数的覆盖数List比较,这样的话,输入n个数,就要有n个List,每个数都要和n-1个List比较,但其实没有必要。
因为每个数的覆盖数不会包括它本身,如果包括的话就是死循环了,永远没法得到1.所以直接算出来每个数的覆盖数,再拿输入的数去比较。
接收覆盖数的容器,用HashSet,这样就不用判断有没有重复。
代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
HashSet hs=new HashSet();
List alist=new ArrayList();
Scanner s=new Scanner(System.in);
int a=s.nextInt();
int arr[]=new int[a];
int arr1[]=new int[a];
for(int i=0;i
arr[i]=s.nextInt();
arr1[i]=arr[i];
}
for(int i=0;i