取数组中出现频次最高的元素算法

今天去面试,居然让我写算法,
都十多年没看过算法了,平时工作的时候也不是很重视,当然是歇菜了。
想起那个算法题,其实很简单,哎,记录下吧。
问题:
一个char数组,
char[] chars = {'a', 'f', 'c', 'a', 'a', 'f', 'f', 'a', 'g', 'm', 'm', 'g', 'h', 'f', 'z','f'};
要求通过sort方法,得出出现频次最高的char

粗糙的算法如下:

    private char sort() {
        // 最大值,如果要出现最多那个char的频次数值,需要加1,因为这个max不包含自身
        int max = 0;
        //返回用的char
        char result = 0;
        for (int i = 0; i < chars.length; i++) {
            int submax = 1;//当前循环最大值
            for (int j = i + 1; j < chars.length; j++) {
                if (chars[i] == chars[j]) {
                    submax += 1; //当char相等,当前循环最大值+1
                }
            }
            if (submax > max) {
                max = submax;
                result = chars[i];
            }
        }
        return result;
    }

有个问题,如果有两个char频次一样的,应该是取第一个。
先记录下,后续有效率更高的,再来更新。

哎,平时要多做记录积累啊。。

你可能感兴趣的:(取数组中出现频次最高的元素算法)