给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)

Result01:

两层for循环枚举,时间复杂度为O(N2),空间复杂度O(1)。
给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)_第1张图片
给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)_第2张图片

 //暴力解:
    public static char Result01(char[] chars) {
        int maxNums = 0;//保存最大出现次数
        int index = 0;//记录出现次数最多的元素在数组中的下标

        for (int i = 0; i < chars.length; i++) {
            int count = 0;//用于记录每一轮循环选中的元素  出现的次数
            for (int j = 0; j < chars.length; j++) {
                if (chars[i] == chars[j]) {
                    count++;
                }
            }
            if (maxNums < count) {//一轮比较结束后 更新最大值 以及目标元素下标
                maxNums = count;
                index = i;
            }
        }
        System.out.println("次数:"+maxNums);
        return chars[index];
    }

Result02:

哈希法:用数组模拟哈希表。
给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)_第3张图片
给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)_第4张图片

 //哈希法:用数组模拟哈希表
    public static char Result02(char[] chars) {
        int[] nums = new int[26];//0-25 表示 a - z
        for (int i = 0; i < chars.length; i++) {
            nums[chars[i]-'a']++;//用ASCII码来做运算 数组小标就是对应的字母 eg 'a' - 'a' =0 即0号位置次数加一
                                //'b' - 'a' = 1 即1号位置次数加一
        }
        char result = 'a';//记录结果字母  赋初值为null
        int max = 0;
        for (int j = 0; j < nums.length; j++) {
            if (max<nums[j]){//数组中存储的是各个字母出现的次数
                max = nums[j];// 更新最大出现次数
                result = (char) (j + 'a');//更新结果字母
            }
        }
        System.out.println("次数:"+max);
        return result;
    }

Tips:

你可能感兴趣的:(算法,算法,leetcode,数据结构,java,学习,笔记)