zoukankan      html  css  js  c++  java
  • LeetCode451. 根据字符出现频率排序

    一、题目描述

    二、解法

    class Solution {
        public String frequencySort(String s) {
            if (s == null || s.length() <= 2) return s;
            Map<Character,Integer> map = new HashMap<>();
            for (char c : s.toCharArray()) {
                map.put(c,map.getOrDefault(c, 0) + 1);
            }
            /**
             *  方法1: 使用List寻找合适的插入位置
             *      执行耗时:776 ms,击败了6.68% 的Java用户
             *         内存消耗:40.4 MB,击败了7.68% 的Java用户
             */
            /*List<Character> list = new ArrayList<>();
            int index = list.size();
            for (char c : map.keySet()) {
                for (int i = 0; i < list.size(); i++) {
                    if (map.get(c) > map.get(list.get(i))) {
                        index = i;
                        break;
                    }
                }
                for (int i = 0; i < map.get(c); i++) {
                    list.add(index, c);
                }
                index = list.size();
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < list.size(); i++) {
                sb.append(list.get(i));
            }
            return sb.toString();*/
            /**
             * 方法2:使用大顶堆
             *         执行耗时:21 ms,击败了46.47% 的Java用户
             *         内存消耗:39.3 MB,击败了80.18% 的Java用户
             */
            // o1-o2表示前一个数-后一个数,如果>0则交换,实现升序。相反,o2-o1为降序。
            PriorityQueue<Character> maxHeap = new PriorityQueue<>(
                    (o1, o2) -> map.get(o2) - map.get(o1));
            maxHeap.addAll(map.keySet());
            StringBuilder sb = new StringBuilder();
            while (!maxHeap.isEmpty()) {
                char c = maxHeap.poll();
                for (int i = 0; i < map.get(c); i++) {
                    sb.append(c);
                }
            }
            return sb.toString();
        }
    }
  • 相关阅读:
    Tree Constructe(icpc济南)(二分图+构造)
    Cleaning(CF1474D)
    Matrix Equation (2020icpc济南)
    关于位运算
    poj2540半平面交+判范围
    做题记录0(并查集|树状数组)
    ac自动机
    二次剩余
    BSGS算法
    无向图的桥
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14117541.html
Copyright © 2011-2022 走看看