用两种方法找出无序列表中出现次数最多的元素

一颗蔬菜 2019-09-23 PM 93℃ 0条

【题目】

求无序数组中出现次数最多的元素,若两个元素出现次数一样,则取值比较大的元素。

【思路】

思路1:记录元素出现的次数,循环不断更新最大次数和对应的值,最后保存的就是出现次数最多的元素。
思路2:无序列表中的元素和其出现次数作为键值对存放在HashMap中,最后遍历HashMap,找出出现次数最多的元素。

【代码实现】

方法1

public void  findMax(int[] nums) {
        LinkedList<Integer> list = new LinkedList<Integer>();
        for (int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
        }
        int most_value = 0; // 出现次数最多的元素值
        int most_count = 0; // 出现次数最多的元素的出现次数

        int fir_value = 0; // 第一个元素值
        int fir_count = 0; // 第一个元素出现的次数

        while (!list.isEmpty()) {
            fir_value = list.getFirst();
            fir_count = 1;

            list.removeFirst();

            for (int i = 0; i < list.size(); i++) {
                int value = list.get(i);

                if (value ==  fir_value) {
                    list.remove(i);
                    fir_count ++;
                    i --;
                }
            }

            if (fir_count > most_count || (fir_count == most_count && fir_value > most_value)) {
                most_count = fir_count;
                most_value = fir_value;
            }
            
        }
        System.out.println("出现频率最高的元素:" + most_value + ",次数:" + most_count);
    }

方法2

public void findMax1(int[] nums) {
        HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();

        for (int i = 0; i < nums.length; i ++) {
            if (!hashMap.containsKey(nums[i])) {
                hashMap.put(nums[i], 1);
            } else {
                hashMap.replace(nums[i], hashMap.get(nums[i]) + 1);
            }
        }

        Set<Entry<Integer, Integer>> entrys  = hashMap.entrySet();
        
        int max_value = 0; // 出现次数最多的元素
        int max_count = 0;
        for (Entry<Integer, Integer> entry : entrys) {
            if (entry.getValue() > max_count || (entry.getValue() == max_count || entry.getKey() < max_value)) {
                max_count = entry.getValue();
                max_value = entry.getKey(); 
            }
        }

        System.out.println("出现次数做多的元素是" + max_value + ", 出现次数是" + max_count);
    }
标签: 算法

非特殊说明,本博所有文章均为博主原创。