lintcode1613 最高频率的IP

文章重在:算法的思路、代码实现、注释
版权声明:版权所有@hottong,转载请声明https://blog.csdn.net/hottong/article/details/89466187

描述

给定一个字符串数组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。算法专栏的第一篇有更详细的注解lintcode1613 最高频率的IP_第1张图片

代码

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];
    }
}

你可能感兴趣的:(算法)