برنامه نویسی

مرتب کردن کاراکتر بر اساس فرکانس – انجمن DEV

مشکل
پیچیدگی زمانی: تعداد نویسه‌های متمایز (k) می‌تواند حداکثر 256 باشد، بنابراین با وارد کردن k عناصر در صف اولویت، زمان O(k log k) را می‌گیرد، جایی که k ≤ 256 است. بنابراین، این با O(256 log محدود می‌شود. 256) = O(1) زیرا یک مقدار ثابت است.

TC:


O(n)O(n)

، O(n) برای ایجاد آرایه نقشه، + O(1) برای ساختن صف هیپ/اولویت، + O(n) برای ایجاد رشته نتیجه.

SC:

O(n)O(n)

، برای صف اولویت با اندازه 256 = O(1)، + و

O(n)O(n)

برای StringBuilder str

class Solution {
    public String frequencySort(String s) {
        PriorityQueue<Pair<Character, Integer>> q = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());

        int map[] = new int[256];//count of all the ascii characters
        for (int i = 0; i < s.length(); i++) {
            map[s.charAt(i)]++;
        }
        for (int i = 0; i < map.length; i++) {
            if (map[i] >=1)
                q.add(new Pair((char) i, map[i]));

        }
        StringBuilder str = new StringBuilder();
        while (!q.isEmpty()) {
            Pair<Character, Integer> p = q.remove();
            int count = p.getValue();
            while (count-- > 0) {
                str.append(p.getKey());
            }
        }
        return str.toString();
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا