您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

基础算法acwing刷题指南6

目录:

786. 第k个数

786. 第k个数

给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数

输入格式

第一行包含两个整数 n和 k。

第二行包含 n 个整数(所有整数均在10^9范围内),表示整数数列。

输出格式

输出一个整数,表示数列的第 k 小数。

输入样例:

5 3
2 4 1 5 3

输出样例:

3

学习了STL中的sort就应该实践一下

#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;

int n, m;
int q[N];

int main()
{
    cin >> n >> m;
    for(int i = 0; i < n; i ++) cin >> q[i];

    sort(q, q + n);
    cout << q[m - 1] << endl;

    return 0;
}

快排:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m;
int q[N];

void quick_sort(int q[], int l, int r)
{
    if(l >= r) return;

    int x = q[l + r >> 1], i = l - 1, j = r + 1;

    while(i < j) 
    {
        do i ++; while(q[i] < x);
        do j --; while(q[j] > x);

        if(i < j) swap(q[i], q[j]);
    }

    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);
}//这种方法好记很多

int main()
{
    cin >> n >> m;
    for(int i = 0; i < n; i ++) cin >> q[i];

    quick_sort(q, 0, n - 1);

    cout << q[m - 1] << endl;

    return 0;
}
 


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进