Algo.Java.Arrays.AnotherExampleOfFrequencyApproach

package org.example;


public class Main {
    public static void main(String[] args) {
        relativeSortArray(new int[]{2,21,43,38,0,42,33,7,24,13,12,27,12,24,5,23,29,48,30,31}, new int[]{2,42,38,0,43,21});
    }

    public static int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] fq = new int[1000 + 1];
        for (int i = 0; i < arr1.length; i++) {
            fq[arr1[i]]++;
        }

        int idx = 0;
        for (int i = 0; i < arr2.length; i++) {
            while (fq[arr2[i]] > 0) {
                arr1[idx++] = arr2[i];
                fq[arr2[i]]--;
            }
        }

        for (int i = 0; i < 1001; i++) {
            while (fq[i] > 0) {
                arr1[idx++] = i;
                fq[i]--;
            }
        }

        return arr1;
    }


}

another example

package org.example;


public class Main {
    public static void main(String[] args) {
        sortString("aaaabbbbcccc");
    }

    public static String sortString(String s) {
        int[] fq = new int[131];
        for (int i = 0; i < s.length(); i++) {
            fq[(int) s.charAt(i)]++;
        }

        StringBuilder sb = new StringBuilder();
        while (true) {
            boolean needBreak = true;
            for (int i = 65; i < 130; i++) {
                if (fq[i] > 0) {
                    sb.append((char) i);
                    fq[i]--;
                    needBreak = false;
                }
            }
            for (int i = 130; i >= 65; i--) {
                if (fq[i] > 0) {
                    sb.append((char) i);
                    fq[i]--;
                    needBreak = false;
                }
            }
            if (needBreak) {
                break;
            }
        }
        return sb.toString();
    }
}
This entry was posted in Без рубрики. Bookmark the permalink.