找到無序陣列中最小的k個數
輸入包含兩行,第一行包含兩個整數n和k(1≤k≤n≤105),代表陣列arr的長度,第二行包含n個整數,代表陣列arr。
輸出描述:
輸出包含一行,k個整數,代表陣列中最小的k個整數。
備註:
時間複雜度O(nlog_2k)和O(n)O(nlog2k)和O(n),額外空間複雜度O(n)O(n)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入陣列長度n和輸出最小k個整數,以空格隔開");
String[] num = sc.nextLine().split(" ");
while (num.length <2 || Integer.parseInt(num[0]) < Integer.parseInt(num[1])){
System.out.println("輸入格式有誤,請重新輸入");
num = sc.nextLine().split(" ");
}
int n = Integer.parseInt(num[0]);
int k = Integer.parseInt(num[1]);
System.out.println("請輸入陣列arr,數字之間以空格隔開");
String[] inputArr = sc.nextLine().split(" ");
int[] numArr = new int[inputArr.length];
for (int i = 0;i< inputArr.length;i++){
numArr[i] = Integer.parseInt(inputArr[i]);
}
// 需要輸出最小k個數的陣列
int[] outputArr = new int[k];
// 預設取原陣列前k個填充輸出陣列
if (k >= 0) System.arraycopy(numArr, 0, outputArr, 0, k);
// 排序
Arrays.sort(outputArr);
for (int i=k;i< numArr.length;i++) {
// 如果第i個數比輸出陣列的最後一位小,說明需要放入輸出陣列
if (numArr[i] < outputArr[k - 1]) {
// 陣列後移
change(outputArr,numArr[i]);
}
}
for (int i = 0; i < k; i++) {
System.out.print(outputArr[i] + " ");
}
}
public static void change(int []a,int x){
int i=0;
for (;i<a.length;i++){
// 找到需要後移的索引
if(x<a[i])break;
}
// 通過陣列複製實現陣列後移
if (a.length - 1 - i >= 0) System.arraycopy(a, i, a, i + 1, a.length - 1 - i);
a[i]=x;
}
相關文章
- 無序陣列求第K大的數陣列
- 如何從整數陣列中找到最大和最小數陣列
- 求陣列中k個數的所有組合陣列
- 尋找兩個正序陣列中的中位數陣列
- 找到兩個陣列中的公共元素陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- 陣列中未出現的最小正整數陣列
- 給定陣列中找到最大的兩個數陣列
- 448. 找到所有陣列中消失的數字陣列
- 4. 尋找兩個正序陣列的中位數陣列
- [求解]陣列,分成倆個陣列,陣列值之和的相差最小。陣列
- 淦448. 找到所有陣列中消失的數字陣列
- LeetCode-448-找到所有陣列中消失的數字LeetCode陣列
- 求最小k個數
- 陣列中的第K個最大元素陣列
- 旋轉陣列中的最小元素陣列
- 力扣448. 找到所有陣列中消失的數字力扣陣列
- 在其它數都出現k次的陣列中找到只出現一次的數陣列
- JZ-029-最小的 K 個數
- 陣列中每個陣列元素出現的次數陣列
- 尋找兩個正序陣列的中位數問題,方法一:合併陣列檢索法陣列
- 最短無序連續子陣列陣列
- JZ-032-把陣列排成最小的數陣列
- 【LeetCode Hot 100】4. 尋找兩個正序陣列的中位數LeetCode陣列
- GO實現:leetcode之尋找兩個正序陣列的中位數GoLeetCode陣列
- 兩個有序陣列的中位數陣列
- 每日一練(21):最小的k個數
- 215. 陣列中的第K個最大元素陣列
- 力扣演算法題:尋找兩個正序陣列的中位數力扣演算法陣列
- leetcode最短無序連續子陣列LeetCode陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 找到陣列中出現特定次數數字的問題陣列
- 找出陣列中第 k 大的數字及其出現次數陣列
- 【遞迴打卡1】在兩個長度相等的排序陣列中找到上中位數遞迴排序陣列
- 分支預測:為什麼有序陣列比無序陣列快?陣列
- LeetCode-215-陣列中的第K個最大元素LeetCode陣列
- 找一個陣列中特別的數陣列