首页 > 其他分享 >DreamJudge-1383-查找第K小的数(待解决)

DreamJudge-1383-查找第K小的数(待解决)

时间:2024-06-15 22:32:48浏览次数:21  
标签:set int element DreamJudge nth 查找 numbers unique 1383

1.题目描述

?Time Limit: 1000 ms
Memory Limit: 256 mb

查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。

输入输出格式

输入描述:

输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。

输出描述:

输出第k小的整数。

输入输出样例

输入样例#:

6
2 1 3 5 2 2
3

输出样例#:

3

题目来源
北京邮电大学

2.题解

注意这一题不同于【深基9.例4】求第 k 小的数, 因为题目要求查找一个数组的第K小的数,注意同样大小算一样大

2.1 set集合去重 + nth_element寻找第k小的数

思路

这里因为nth_element会将重复的数也纳入计算,所以先要进行去重
这里使用set去重后,nth_element要求连续数组,所以还要将set转化为vector数组

代码

#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
    	// 注意这里nth_element将重复的数每个都进行了计数,与题目要求的只看成一个不符,所以这里进行去重 
        set<int> unique_numbers;
        for (int i = 0; i < n; ++i) {
            int number;
            cin >> number;
            unique_numbers.insert(number);
        }
        int k;
        cin >> k;

        // 将set转换为vector
        vector<int> numbers(unique_numbers.begin(), unique_numbers.end());
        // 使用 nth_element(只能使用连续的vector数组) 进行部分排序!!! 
        nth_element(numbers.begin(), numbers.begin() + k - 1, numbers.end());
        // 输出第 k 小的元素
        cout << numbers[k - 1] << endl;
    }
    return 0;
}

2.2 sort排序 + unique(形式去重,只是将重复元素全部放到数组末尾了)

思路

先排好,再去重,然后直接定位第k位即可!

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n, k, a[100];
    cin>>n;
    for(int i=1;i<=n;i++)   cin>>a[i];
    sort(a+1,a+1+n);           // 先排好
    unique(a+1,a+1+n);      // 再去重
    cin>>k;
    cout<<a[k]<<endl;
    return 0;
 }

2.3 分治算法 //TODO

思路

参考【深基9.例4】求第 k 小的数, 暂时没想清楚

代码

标签:set,int,element,DreamJudge,nth,查找,numbers,unique,1383
From: https://www.cnblogs.com/trmbh12/p/18249874

相关文章

  • 15-字符串处理的常用函数——查找字符串,求字符串长度,分割字符串,查找指定字符,比较字符
    15-字符串处理的常用函数——查找字符串,求字符串长度,分割字符串,查找指定字符,比较字符串,连接字符串文章目录15-字符串处理的常用函数——查找字符串,求字符串长度,分割字符串,查找指定字符,比较字符串,连接字符串1.`strstr`1.1示例代码2.`strlen`2.1示例代码3.`strtok`......
  • 初识C语言~~查找票数最高候选人
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、题目描述二、解题思路三、编写代码总结前言提示:这里可以添加本文要记录的大概内容:大家好又见面喽!!今天是刷题,二话不说开干。提示:以下是本篇文章正文内容,下面案例可供参考一、题目......
  • DreamJudge-1177-查找学生信息
    1.题目描述TimeLimit:1000msMemoryLimit:32768mb“臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于......
  • DreamJudge-1310-奥运排序问题(精华)
    1.题目描述TimeLimit:1000msMemoryLimit:256mb按要求,给国家进行排名。输入输出格式输入描述:有多组数据。第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。接下来一行给出M个国家号。输出描述:......
  • DreamJudge-1248-整数奇偶排序
    1.题目描述TimeLimit:1000msMemoryLimit:256mb输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列;2.然后输出其中的偶数,并按从小到大排列。输入输出格式输入描述:任意排序的10个整数(0~100),彼此以空格分隔。输......
  • DreamJudge-1227-日志排序(精华)
    1.题目介绍TimeLimit:1000msMemoryLimit:256mb有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:“hs_10000_p”是计算任务的名称,“2007-01-1719:22:53,315”是计算任务开始执行的时间“年-月-日时:分:秒,毫秒”,“253.035(s)”是......
  • DreamJudge-1217-国名排序
    1.题目描述TimeLimit:1000msMemoryLimit:256mb问题描述:小李在准备明天的广交会,明天有来自世界各国的客房跟他们谈生意,小李要尽快的整理出名单给经理,你能帮他把客户来自的国家按英文字典次序排好吗?例如小李手上有来自加拿大,美国,中国的名单,排好的名单应是美国,加拿......
  • DreamJudge-1159-成绩排序2.0
    1.题目描述TimeLimit:1000msMemoryLimit:32768mb用一维数组存储学号和成绩,然后,按成绩排序输出。输入输出格式输入描述:输入第一行包括一个整数N(1<=N<=100),代表学生的个数。接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。输出描述:按照学生的成......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【二分查找】2024D-部
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavacpp时......
  • 单向链表————遍历、查找、插入结点 (基于C语言实现)
    #include<stdio.h>#include<stdbool.h>#include<stdlib.h>#include<stdbool.h>//指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{Dat......