一、知识点:

计数排序

二、文字分析:

使用计数排序的思想。首先,遍历一次数组,统计每个品种牛的数量,然后根据统计结果构造排序好的数组。

通过遍历数组两次来完成排序。时间复杂度为O(n),其中n是牛的数量。空间复杂度为O(k),其中k是牛的品种数量。

三、编程语言:

java

四、正确代码:

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param cows int整型一维数组
     * @param k int整型
     * @return int整型一维数组
     */
    public int[] sortCowsIII(int[] cows, int k) {
        int[] count = new int[k]; // 品种牛的计数数组,初始为0
        int[] sortedCows = new int[cows.length]; // 结果数组,保存排序后的牛的数组

        // 统计每个品种牛的数量
        for (int i = 0; i < cows.length; i++) {
            count[cows[i]]++;
        }

        int index = 0; // 结果数组的索引

        // 按照品种顺序填充结果数组
        for (int i = 0; i < count.length; i++) {
            for (int j = 0; j < count[i]; j++) {
                sortedCows[index] = i;
                index++;
            }
        }

        return sortedCows;
    }
}