時間限制:1 秒
記憶體限制:32 兆
特殊判題:否
提交:4133
解決:856
題目描述:輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
輸入:每個測試案例包括2行:
第一行為2個整數n,k(1<=n,k<=200000),表示陣列的長度。
第二行包含n個整數,表示這n個數,陣列中的數的範圍是[0,1000 000 000]。
輸出:對應每個測試案例,輸出最小的k個數,並按從小到大順序列印。
樣例輸入:
8 4
4 5 1 6 2 7 3 8
樣例輸出:
1 2 3 4
首先用快排把所有元素排列出來,在列印前k個數,這不是乙個好的方法。
#include #include #include #include using namespace std;
const int maxn = 200010;
int main()
return 0;
}
如果利用快排的思想,選主元,只要找出前k個數就可以了,但是我寫的超時了,悲催!但是這個想法比上一種好很多。
#include #include #include #include using namespace std;
const int maxn = 200010;
int partion(int* arr, int low, int high)
}tmp = arr[low];
arr[low] = arr[j];
arr[j] = tmp;
}return j;
}void quick_sort(int* arr, int low, int high)
void getnumbers(int* arr, int n, int k)
else
}for(i = 0; i < k; ++i)
output[i] = arr[i];
sort(output, output+k);
printf("%d", output[0]);
for(i = 1; i < k; ++i)
printf(" %d", output[i]);
printf("\n");
return ;
}int main()
getnumbers(arr, n, k);
}return 0;
}
如果本題不包含重複的數,那麼就可以利用mutiset來解決。
#include #include #include #include using namespace std;
const int maxn = 200010;
int main()}}
set >::iterator iter = insertnum.begin();
int num = 0;
for(; iter != insertnum.end(); ++iter)
arr[num++] = *iter;
printf("%d", arr[k-1]);
for(i = k-2; i >= 0; --i)
printf(" %d", arr[i]);
printf("\n");
}return 0;
}
如果利用大頂堆,是可以解決這個問題的。
#include#include#include#include#include#include#includeusing namespace std;
const int maxn = 200010;
void swap(int &a, int &b)
struct cmp
}else
(*heap).push(arr[i]);
}}void print_heap(priority_queue,cmp> *heap)
if(!s.empty())
}}int main()
} return 0;
}
九度oj 1371 最小的k個數
時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 6191 解決 1309 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入 每個測試案例包括2行 第一行為2個整數n,k 1 n,k 200000 表示陣...
九度OJ 1371 最小的K個數 堆排序
題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入 每個測試案例包括2行 第一行為2個整數n,k 1 n,k 200000 表示陣列的長度。第二行包含n個整數,表示這n個數,陣列中的數的範圍是 0,1000 000 ...
程式設計題目 找出最小的k個數
找出最小或者最大的幾個數我使用的是堆排序,效率為0 nlgn 構建小頂堆返回末尾的k個數 或者 構建大頂堆返回前k個數 1 usr bin env python323 defheap sort ary,num 4def siftdown ary,e,begin,end 5 i,j begin,beg...