文章重在:算法的思路、代码实现、注释
描述
给定一个字符串数组lines
, 每一个元素代表一个IP地址,找到出现频率最高的IP。(给定数据只有一个频率最高的IP)
样例1:
输入 = ["192.168.1.1","192.118.2.1","192.168.1.1"]
输出 "192.168.1.1"
样例2:
输入 = ["192.168.1.1","192.118.2.1","192.168.1.1","192.118.2.1","192.118.2.1"]
输出 "192.118.2.1"
思想
1.lines[]:遍历每一个元素值,frequen[]记录:每个元素初值次数为1
2.对遍历中的元素值lines[j],与第一个元素lines[k]开始比较,若相等:frequen[k]频率值加1,并终止lines[k]的遍历;若不等:遍历lines[k]的下一个值,直至遍历到lines[j]前一个值结束
3.寻找frequen[]中最大值
注:我在微信公众号上有lintcode算法专栏,按照难度系数划分,我写算法过程是:手写逻辑->eclipse实现调试->lintcode提交。公众号为:山有木兮fanyj。算法专栏的第一篇有更详细的注解
代码
public class Solution {
/**
* @param ipLines: ip address
* @return: return highestFrequency ip address
*/
public String highestFrequency(String[] lines) {
int len = lines.length;
int[] frequen = new int[len];
int j = 0;
for (j = 0; j < len; j++) {
frequen[j] = 1; // 1.遍历每一个元素,均出现一次
int k = 0;
for (; k < j; k++) { // 2.在当前遍历元素中,比较之前的元素,若重复出现,次数加1 并终止比较,否则,进入下一个遍历元素
if (lines[k].equals(lines[j])) {
requen[k]++;
break;
}
}
}
/* 3.寻找frequen 数组中 最大的数 */
int max = 0;
for (int i = 1; i < lines.length; i++) {
if (frequen[max] < frequen[i]) {
max = i;
}
}
System.out.println("出现的次数" + frequen[max]);
return lines[max];
}
}