小米筆試題:無序數組中最小的k個數

 題目描述數組

連接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relative
來源:牛客網

無序數組中最小的k個數 對於一個無序數組,數組中元素爲互不相同的整數,請返回其中最小的k個數,順序與原數組中元素順序一致。 給定一個整數數組A及它的大小n,同時給定k,請返回其中最小的k個數。 測試樣例: [1,2,4,3],4,2
返回:[1,2]

 

代碼測試

須要保留K個較小的元素,能夠刪除n-k個較大的元素。spa

public class KthNumbers {
    public static int[] findKthNumbers(int[] A, int n, int k) {
        int delNum = n - k;// 要刪除的元素數量
        int len = A.length;// 實際數組中的元素個數
        while (delNum > 0) {
            // 找到當前數組中最大的元素
            int maxIndex = 0;// 記錄最大元素的下標
            int i;
            for (i = 1; i < len; i++) {// 尋找最大元素並記錄其在數組中的下標
                if (A[maxIndex] < A[i]) {
                    maxIndex = i;
                }
            }
            // 刪除當前最大元素即maxIndex
            for (int j = maxIndex; j < len - 1; j++) {
                A[j] = A[j + 1];
            }
            len--;
            delNum--;
        } 

        int result[] = new int[k];
        for (int i = 0; i < k; i++) {
            result[i] = A[i];
        }
        return result;
    }
}
相關文章
相關標籤/搜索