单链表计数算法

时间:2016-01-15 11:58:58

标签: java algorithm singly-linked-list

我需要编写一个遍历已排序的单链表的metod并返回 显示次数最多但仅在列表中显示一次的数字。

有人能指出我正确的方向吗?

还不能找到一个优雅的解决方案,我应该使用递归吗?

我希望代码尽可能高效。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以使用HashMap<index,count> 遍历链表 如果你找到相同的号码然后计算 最后检查哪个计数很好并返回其索引。

答案 1 :(得分:0)

 public int findMoreRecurrentValue(List<Integer> sortedList) {
    if(sortedList.size() == 0) return -1;
    int mostRecurrent = -1;
    int nReccurrences = 0;
    int n = 1;
    int current = sortedList.get(0);
    for(int i = 1; i < sortedList.size(); ++i) {
        if(sortedList.get(i) == current)
            ++n;
        else {
            if(n > nReccurrences) { 
                mostRecurrent = current;
                nReccurrences = n;
            }
            current = sortedList.get(i);
            n = 1;
        }
    }
    // Check again at the end, the most reccurrent value could be the last one.
    if(n > nReccurrences) {
        mostRecurrent = current;
        nReccurrences = n;
    }

    return mostRecurrent;
}