Java 更新阵列的模式

Java 更新阵列的模式,java,algorithm,Java,Algorithm,我有一个数组A,必须在每个m步之后找到数组。在每个步骤中,数组的一个元素都会更改。如何在每次更改后有效地找到模式。我使用以下代码计算初始模式: import java.io.*; import java.util.*; import java.math.*; class mode { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedRea

我有一个数组A,必须在每个m步之后找到数组。在每个步骤中,数组的一个元素都会更改。如何在每次更改后有效地找到模式。我使用以下代码计算初始模式:

import java.io.*;
import java.util.*;
import java.math.*;

class mode {
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        long[] A = new long[N + 1];
        HashMap<Long, Integer> hm = new HashMap<Long, Integer>();
        for (long i = 0; i <= (long)N; i++) {
            hm.put(i, 0);
        }
        hm.put((long)0, 0);
        String[] s = br.readLine().split(" ");
        for (int i = 1; i <= N; i++) {
            A[i] = Long.parseLong(s[i - 1]);
            int res = hm.get(A[i]) + 1;
            hm.put(A[i], res);
        }
        int countM = 0;
        long M = hm.get(A[0]);
        for (int i = 1; i <= N; i++) {
            if (hm.get(A[i]) >= countM) {
                if (A[i] > M) {
                    M = A[i];
                }
                countM = hm.get(A[i]);
            }
        }
        System.out.println(M);
    }
}
import java.io.*;
导入java.util.*;
导入java.math.*;
类模式{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
long[]A=新长[N+1];
HashMap hm=新的HashMap();

对于(long i=0;i您可以在
TreeSet
中存储对
(出现次数,值)
,并在每次更改初始数组时更新它(最多更改2对,因此需要
O(log N)
时间)。答案始终是
TreeSet
中的最大元素(您可以使用
last
方法获得它).

您的问题非常不清楚。您想要的输出是什么?让初始数组为{1,2,1,3,3,4,5,1,3,2}。然后初始模式是3。现在我将第五个元素更改为2。现在模式变为2。我再次将已更改数组的第四个元素更改为1。模式变为1。我想在每次更改后找到模式。然后请将信息添加到我不熟悉的问题树集。你能给出一个片段吗?@user2784016我想已阅读ing JavaDoc:是学习如何使用它的最简单方法。