C++相关练习及详细讲解

news2024/11/22 12:08:42

目录

    • 题1:输出数组中第k小的数
    • 在数组内找出查找数字在该数组第一次出现的索引

题1:输出数组中第k小的数

题目描述:
给定一个数组arr 输出数组中第k小的数
如果不存在 输出-1
输入格式:
第一行输入一个数字n 代表数组arr大小
第二行依次输入n个数
第三行输入一个数字k
输出格式:
输出数组中第k小的数 如果不存在 输出-1
测试样例:
在这里插入图片描述

分析:
根据set容器去重的特性以及set容器内部按照从小到大的顺序排列
将数组内所有元素输入到set容器内,然后对set迭代器进行遍历,如果遍历到第k个元素存在则存在第k小的数,进行输出;如果不存在,也就是迭代器到end的位置,则输出-1。

举例:
数组元素:3 3 2
set容器:2 3
如果k=2,则输出3
如果k=3,此时set迭代器遍历到end()的位置,不存在该数据,则输出-1

#include<iostream>
#include<set>

using namespace std;
int main()
{
	//数组大小
	int n;
	//定义第k小的数
	int kmin;
	cin >> n;
	int *arr = new int[n];
	//给数组元素传值
	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}
	//数组传入set容器
	set<int> s(arr, arr + n);
	cin >> kmin;
	//用来记录遍历位置
	int count = 1;
	set<int>::iterator it = s.begin();

	while (it != s.end())
	{
		//如果第k小的数存在则输出该值,跳出循环
		if (count == kmin)
		{
			cout << *it;
			break;
		}
		++it;
		++count;
	}
	//如果循环正常结束,则第k个值不存在,输出-1
	if (it == s.end())
	{
		cout << -1 << endl;
	}
	delete[] arr;

	return 0;
}

在数组内找出查找数字在该数组第一次出现的索引

题目描述
给定一个长度为N的单调不递减整数数组 arr,进行Q次询问。对于每次询问,给出一个整数X,要求找出X在arr中第一次出现的下标,如果X未在数组中出现过,则输出-1。
输入格式
第一行输入两个整数N,Q 其中N 代表数组 arr 长度,Q代表询问次数
第二行输入N个整数 用空格分开
第三行输入Q个整数 用空格分开
输出格式
在一行中输出Q次查询的结果 每个整数用空格分开

分析:
用三个数组分别记录要查询的值,被查询的值,值在给定数组的索引。
首先给出最简单遍历的方法,该方法时间复杂度较高

int main()
{

    int n,q;
    cin >> n >> q;
    //数组元素放入arr
    int* arr = new int[n];
    for(int i = 0; i < n; ++i)
    {
        cin >> arr[i];
    }
    
    //查询元素放入arr_q
    int* arr_q = new int[q];
    for(int i = 0; i < q; ++i)
    {
        cin >> arr_q[i];
    }
	//查询结果放入result
    int* result = new int[q];
    for(int i = 0; i < q; ++i)
    {
        int Q = arr_q[i];
        int idx = -1;
        for(int j = 0; j < n; ++i)
        {
            if(arr[j] == Q)
            {
                idx = j;
                break;
            }
        }
        result[i] = idx;
    }

    for(int i = 0; i < q; ++i)
    {
        cout << result[i] << " ";
    }
    cout << endl;
    
	delete[] arr;
    delete[] arr_q;
    delete[] result;
	return 0;
}

方法二:
上述方法在面对数据量大时时间复杂度过高,可以使用二分查找降低查询次数。

#include<iostream>

using namespace std;

int binarySearch(int* arr, int n, int Q)
{
    int left = 0;
    int right = n - 1;
    int idx = -1;

    while(left <= right)
    {
        int mid = (right + left)/2;
        if(arr[mid] == Q)
        {
            idx = mid;
            right = mid - 1;
        }
        else if(arr[mid] > Q)
        {
            right = mid - 1;
        }
        else if(arr[mid] < Q)
        {
            left = mid + 1;
        }
    }
    return idx;
}

int main()
{

    int n,q;
    cin >> n >> q;
    //数组元素放入arr
    int* arr = new int[n];
    for(int i = 0; i < n; ++i)
    {
        cin >> arr[i];
    }
    
    //查询元素放入arr_q
    int* arr_q = new int[q];
    for(int i = 0; i < q; ++i)
    {
        cin >> arr_q[i];
    }

    int* result = new int[q];
    for(int i = 0; i < q; ++i)
    {
        int Q = arr_q[i];
        int idx = binarySearch(arr, n, Q);
        result[i] = idx;
    }

    for(int i = 0; i < q; ++i)
    {
        cout << result[i] << " ";
    }
    cout << endl;
    
    delete[] arr;
    delete[] arr_q;
    delete[] result;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S32K324 UDS Bootloader开发-下位机篇-Bootload软件(1)

文章目录 前言启动过程Bootloader开发链接文件编译文件跳转函数CAN收发相关发送接收初始化及使能CAN周期函数总结前言 上一篇文章介绍了S32K324 -UDS Bootlodaer开发中的需求,本文根据需求开发Bootloader软件。 本文参考NXP官网的S32K324 UBL,其中有一些Bug,也有一些和上位机…

C++ 实现红黑树

红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因…

SMART PLC开放式以太网通信(UDP通信)

西门子S7-200 SMART PLC不仅支持开放式以太网通信,还支持MODBU-RTU,以及ModbusTcp通信,详细内容请参考下面文章: MODBUS-RTU主站通信 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客文章浏览阅读2.5k次,点赞5次,收藏10次。MODBUS通讯…

Ubuntu 20.04源码安装git 2.35.1

《如何在 Ubuntu 20.04 上从源代码安装 Git [快速入门]》和《如何在 Ubuntu 20.04 上安装 Git》是我参考的博客。 https://git-scm.com/是git官网。 lsb_release -r看到操作系统版本是20.04。 uname -r看到内核版本是5.4.0-156-generic。 sudo apt update更新一下源。 完…

操作系统复习(3)处理机调度与死锁

一、概述 1.1了解调度的层次 调度是指&#xff0c;在一个队列中&#xff0c;按照某种方法&#xff08;算法&#xff09;&#xff0c;选择一个合适的个体的过程。进程调度的功能就是按一定策略、动态地把CPU分配给处于就绪队列中的某一进程&#xff0c;并使之执行。 作业调度&…

设置DevC++支持c++11标准

1.点击编译选项 2. 设置语言标准 3.点击确认 4.测试代码 使用auto成功 测试&#xff01;

【LeetCode】第 370 场周赛

100115. 找到冠军 I 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足 0 < i, j < n - 1 且 i ! j 的所有 i, j &#xff1a;如果 grid[i][j] 1&#xff0c;那么 i 队比 j 队 强 &…

该酷的酷该飒的飒~质感满满的羊羔绒皮外套

皮毛一体材质柔软舒适 保暖性能极佳 冬天穿也不惧严寒的哦 宽松版型&#xff0c;对身材的包容性很强 外套的细节处理也非常出色&#xff0c;车缝线整齐 纽扣和拉链质量也是很不错的哟

鼠标加速不一定都是好事,有时是适得其反,如在游戏当中

如果你玩游戏&#xff0c;你会想在Mac上禁用鼠标加速。这是因为虽然鼠标加速可能很好&#xff0c;但它可能会导致鼠标光标速度不一致&#xff0c;这在游戏中并不理想。 简单地说&#xff0c;如果macOS检测到你正在以特定的速度或强度移动鼠标&#xff0c;鼠标指针加速会提高光…

PivotNet:Vectorized Pivot Learning for End-to-end HD Map Construction

参考代码&#xff1a;BeMapNet。PS&#xff1a;代码暂未放出&#xff0c;关注该仓库动态 动机和主要贡献 在MapTR系列的算法中将单个车道线建模为固定数量的有序点集&#xff08;对应下图Evenly-based&#xff09;&#xff0c;这样的方式对于普通道路场景具备一定适应性。但是…

深度好文|听懂这些逻辑,你会越变越好。

哈喽&#xff0c;大家好&#xff0c;我是雷工。 最近看了一篇文章&#xff0c;噱头很大&#xff0c;说是手把手的教你&#xff0c;如何从一个普通人&#xff0c;成长为身价千万的中产。 这种话我肯定是不信的&#xff0c;要么标题党&#xff0c;要么割韭菜&#xff0c;千万的中…

048基于web+springboot的校园资料分享平台

欢迎大家关注&#xff0c;一起好好学习&#xff0c;天天向上 文章目录 一项目简介技术介绍 二、功能组成三、效果图四、 文章目录 一项目简介 本校园资料分享平台有管理员和用户两个角色。管理员功能有个人中心&#xff0c;学生管理&#xff0c;资料分享管理&#xff0c;资源分…

【JVM】JDBC案例打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 打破双亲委派机制&#xff08;JDBC案例…

使用springBoot+Redis实现分布式缓存

使用springBootRedis实现分布式缓存 1. 添加redis框架 依赖 2. 配置redis连接信息 #redis 连接的配置信息 spring.redis.database15 spring.redis.port6379 spring.redis.host82.157.236.116 # 可省略 spring.redis.lettuce.pool.min-idle5 spring.redis.lettuce.pool.max-id…

QT进度条 QProgressDialog基础、高级和样式表使用详解

一、基础使用 QProgressDialog是Qt中的一个类&#xff0c;用于显示一个进度条和一个取消按钮&#xff0c;让用户可以在长时间的操作中看到进度&#xff0c;并且可以随时取消。QProgressDialog的基本用法是创建一个对象&#xff0c;设置最小值和最大值&#xff0c;然后在循环中…

多态 多继承的虚表深度剖析 (3)

&#x1f4af; 博客内容&#xff1a;多态 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准C后端工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这里是CSD…

加法运算、 || 、 赋值运算

一、加法运算 在这里插入图片描述 二、&& || 三、赋值运算 四、js类型就八种&#xff1a; 五、css权重、 六&#xff1a;布局&#xff0c;尽量使用块盒。 七、小数精度存储的问题&#xff1a;存的不精确&#xff0c;算的肯定也是有问题的。 八、找单身狗算法题…

STM32G030F6P6 芯片实验 (二)

STM32G030F6P6 芯片实验 (二) Hello World - GPIO LED 尝试了下, 从 0 开始建 MDK HAL M0plus Project, 成功点亮 LED了。 但是 ST-LINK跑着跑着, 码飞了! 不知飞哪去了。 只好拿 MX 建了个 MDK Base。 呼叫 SysTick HAL_Delay(), 切换 LED。 基本上都是一样的用法, 只是换…

逆向学习记录(4)adb

adb用于PC和手机端通讯。 常用命令如下&#xff1a; 如果不是模拟器&#xff08;模拟器一般都有自己的adb&#xff09;&#xff0c;adb会出现在Andirod的SDK中&#xff0c;路径为&#xff1a;Android/SDK/platform-tools。 最好加入环境变量中。

免费亲人微信聊天记录提取软件新版本v1.1,使用说明,注意事项 2023.11.06

V 1.1 优化了备份速度&#xff0c;新增了备份消息类型的选型&#xff0c;可以选择仅仅备份文本&#xff0c;或者文本与音频&#xff0c;或者文本音频视频图片。 有什么办法可以导出与某个人的微信聊天记录&#xff1f; 只想导出与某个微信好友的聊天记录&#xff0c;有办法做到…