后两个案例超时,有大佬指导一下吗。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        List<Set<String>> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(new HashSet<>());
            String s[] = br.readLine().split(" ");
            for (int j = 1; j < s.length; j++) {
                if (!list.get(i).contains(s[j])) {
                    list.get(i).add(s[j]);
                }
            }
        }
        int k = Integer.parseInt(br.readLine());
        for (int i = 0; i < k; i++) {
            String s[] = br.readLine().split(" ");
            double sum = 0;
            if (list.get(Integer.parseInt(s[0])-1).size() >= list.get(Integer.parseInt(s[1])-1).size()) {//选择两个集合中小的进行遍历
                for (String num : list.get(Integer.parseInt(s[1])-1)) {
                    if (list.get(Integer.parseInt(s[0])-1).contains(num)) {
                        sum++;
                    }
                }
            }else {
                for (String num : list.get(Integer.parseInt(s[0])-1)){
                    if (list.get(Integer.parseInt(s[1])-1).contains(num)) {
                        sum++;
                    }
                }
            }
            double result = sum*100 / (list.get(Integer.parseInt(s[0])-1).size() + list.get(Integer.parseInt(s[1])-1).size()-sum);
            String rst=String.format("%.2f",result);
            System.out.println(rst+"%");
        }
    }
}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐