Result01:
两层for循环枚举,时间复杂度为O(N2),空间复杂度O(1)。
//暴力解:
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:
哈希法:用数组模拟哈希表。
//哈希法:用数组模拟哈希表
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: