王道机试C++第 3 章 排序与查找:排序问题 Day28(含二分查找)

查找

查找是另一类必须掌握的基础算法,它不仅会在机试中直接考查,而且是其他某些算法的基础。之所以将查找和排序放在一起讲,是因为二者有较强的联系。排序的重要意义之一便是帮助人们更加方便地进行查找。如果不对数据进行排序,那么在查找某个特定的元素时,需要依次检查所有的元素,这样的方式对于单次或少量的查找来说运行效率是很高的,但查找次数较多时,如果所有元素都是有序的,那么就能更快地进行检索,而不必逐个元素地进行比较。

x(哈工大复试上机题)

题目描述:
输入一个数 n ,然后输入 n 个不同的数值,再输入一个值 x ,输出这个值在数组中的下标(从 0
开始,若不在数组中则输出- 1 )。
输入: 测试数据有多组。输入 n 1 <=   n <=  200 ),接着输入 n 个数,然后输入 x
输出: 对于每组输入, 请输出结果。
样例输入:
2
1 3
0
样例输出:
-1
思路提示:

当循环结束时,如果 idx 的值等于数组的长度 n,这表示遍历整个数组后仍然没有找到目标值 x。因为数组的下标是从 0 到 n-1,所以如果 idx 的值等于 n,那么意味着目标值 x 不在数组中。

代码表示:
#include <bits/stdc++.h>
using namespace std;int main(){int n;char a[200];scanf("%d",&n);for(int i=0;i<n;++i){scanf("%d",&a[i]);}int x;scanf("%d",&x);//查找操作 int idx;//变量作用域 for(idx=0;idx<n;++idx){if(x==a[idx]){printf("%d\n",idx);break;}}if(idx==n){//找不到元素 printf("-1\n");	}}

二分查找:

1、有序数组;2、注意迭代和边界问题

利用传递性,选择合适的比较对象来减少比较次数。

题目描述:

输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m]   输出 YES or NO  查找有则YES 否则NO 。

输入描述:输入有多组数据。 每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m,n<=100)。

输出描述:如果在n个数组中输出YES否则输出NO

代码表示:
#include <bits/stdc++.h>
using namespace std;
int arr[100];//全局数组,便于在不同数组中共享 
bool binarySearch(int n,int x){//查到返回ture否则falseint left=0;int right=n-1;while(left<=right){//易出错 int mid=(left+right)/2;if(arr[mid]==x){return true;}else if(arr[mid]>x){right=mid-1;//右边缘往左边缩
//最后的边界情况 right 和left相等,right可能变为left-1 }else{left=mid+1;} } return false;
}
int main(){int n,m;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;++i){scanf("%d",&arr[i]);}//排序sort(arr,arr+n); scanf("%d",&m);//读取m个数据for(int i=0;i<m;++i){int x;scanf("%d",&x);	if(binarySearch(n,x)){printf("YES\n");}else{printf("NO\n");}} } 
}
心得体会:

仔细理解二分查找的过程函数

bool binarySearch(int n,int x){
    //查到返回ture否则false
    int left=0;
    int right=n-1;
   while(left<=right){  //易出错 
        int mid=(left+right)/2;
        if(arr[mid]==x){
            return true;
        }else if(arr[mid]>x){
            right=mid-1;//右边缘往左边缩
//最后的边界情况 right 和left相等,right可能变为left-1 
        }else{
            left=mid+1;
        } 
    } 
    return false;
}


二分查找与map的关系

题目描述

见上题

代码表示
#include <bits/stdc++.h>
using namespace std;
int main(){map<int,int> findIndex;//元素和下标都是整型 int m,n;int arr[101];while(scanf("%d", &n) != EOF){//5for(int i=0;i<n;++i){for(int i=0;i<n;++i){scanf("%d",&arr[i]);//1 5 2 4 3
//将数组元素作为键,数组元素的下标作为值,插入到 map findIndex 中。findIndex[arr[i]]=i;}scanf("%d",&m);//3for(int i=0;i<m;++i){int findNum;//待查找元素 scanf("%d",&findNum); //2 5 6
//两个迭代器:findIndex.begin()第一个元素  findIndex.end()尾后迭代器 
//find函数返回找到的那个元素迭代器 
//查找元素 findNum 是否存在于 map findIndex中if(findIndex.find(findNum)==findIndex.end()){printf("NO\n");}else{printf("YES\n");}}}}
}
心得体会

1、map的键值对:

map 是一种数据结构,类似于字典或者映射表,它将一个键(key)和一个值(value)关联起来。

通过将数组元素作为键,数组元素在数组中的位置作为值存储到 map 中,我们可以实现以下功能:

  • 可以快速查找某个特定的元素是否存在于数组中;
  • 如果存在,还可以直接获取该元素在数组中的位置

具体到这段代码中的使用,我们声明了一个 map<int, int> findIndex;,表示这个 findIndex 是一个从整数键到整数值的映射。在循环中,我们将数组 arr 中的整数作为键,它们在数组中的位置作为值存储到 findIndex 中。

当我们执行 findIndex[arr[i]] = i; 时,实际上是在 map 中创建了一个键值对,键是 arr[i],值是 i。这样,在之后的查找操作中,我们可以通过键(即 arr[i])快速地找到对应的值(即 i)。

2、输入的主要功能是从输入中读取整数 n,然后读取 n 个整数到数组 arr 中,并将这些整数作为键,它们在数组中的下标作为值,存储到名为 findIndex 的 map 容器中。

接着程序会再次读取一个整数 m,然后循环 m 次,每次读取一个待查找的元素 findNum,并在 findIndex 中查找是否存在这个元素。如果存在,则输出 "YES",否则输出 "NO。

3、当我们执行 findIndex.find(findNum) 时,它会返回一个指向包含指定键 findNum 的键值对的迭代器。findIndex.find(findNum) 方法能够帮助我们快速地查找指定的键。


找最小的数

题目描述

第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x y。输出一组x y,该组数据是所有数据中x最小,且在x相等的情况下y最小的。 

输入描述:输入有多组数据。 每组输入n,然后输入n个整数对。

输出描述:输出最小的整数对。

代码表示
#include <bits/stdc++.h>
using namespace std;int main() {int n;scanf("%d", &n);int arx[1001];int ary[1001];for (int i = 0; i < n; ++i) {scanf("%d%d", &arx[i], &ary[i]);}int min_x = arx[0];//需要专门来一个变量放最小值int min_y = ary[0];for (int j = 1; j < n; ++j) {if (arx[j] < min_x || (arx[j] == min_x && ary[j] < min_y)) {min_x = arx[j];min_y = ary[j];}}printf("%d %d\n", min_x, min_y);return 0;
}

打印极值点下标

习题描述

在一个整数数组上,对于下标为 i 的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称该整数为一个极值点,极值点的下标就是i。

输入描述:每个案例第一行为此数组元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔

输出描述:每个案例输出为n个数字(其中n为该案例中极值点的个数):每个数字对应相应数组的相应极值点下标值,下标值之间用空格分隔。

未完待续。。。。。。。。。。。。。自习室有对贼能说情侣,吵得下不下去啦(╯▔皿▔)╯明天写

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 命令怎么回退到某个特定的 commit 并将其推送到远程仓库?

问题 不小心把提交的名称写错提交上远程仓库了&#xff0c;这里应该是 【029】的&#xff0c;这个时候我们想回到【028】这一个提交记录&#xff0c;然后再重新提交【029】到远程仓库&#xff0c;该怎么处理。 解决 1、首先我们找到【028】这条记录的提交 hash&#xff0c;右…

js【详解】DOM

文档对象模型&#xff08;Document Object Model&#xff0c;简称DOM&#xff09; DOM 是哪种数据结构 &#xff1f; DOM 的本质是浏览器通过HTML代码解析出来的一棵 树。 操作 DOM 常用的 API 有哪些 &#xff1f; 获取 DOM 节点 //方式 1&#xff1a;通过【id】获取&#xf…

掼蛋的牌型与规律(下篇)

一、三不带 一般出三不带有几种情况&#xff1a;没有对子配、对子和三张数量不匹配、对子成了三连对、对子太大。作为发牌方&#xff0c;首发三不带可以迷惑对手。三不带打出来很难处理&#xff0c;如果接了三不带可能就会将小对子留下&#xff0c;不接又不甘心让对方继续有出牌…

ceph跨集群迁移ceph pool rgw

1、跨集群迁移ceph pool rgw 我这里是迁移rgw的pool l老环境 [rootceph-1 data]# yum install s3cmd -y [rootceph-1 ~]# ceph config dump WHO MASK LEVEL OPTION VALUE RO mon advanced au…

CKB转型为BTC Layer2后月涨超 300%,还有哪些转型热门赛道的老项目?

虽然说牛市下&#xff0c;炒新不炒旧。但一些渡过漫长熊市的老牌项目方&#xff0c;重新回到牌桌前开始新叙事后&#xff0c;市场依然有人买单。 部分项目方已经初步尝到了甜头&#xff0c;Arweave&#xff08;AR&#xff09;宣布从去中心化数据存储转换到「以太坊杀手」后&am…

HTML静态网页成品作业(HTML+CSS)——花主题介绍网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

深入理解React中的useState:函数组件状态管理的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

洛谷 素数环 Prime Ring Problem

题目描述 PDF 输入格式 输出格式 题意翻译 输入正整数 nn&#xff0c;把整数 1,2,\dots ,n1,2,…,n 组成一个环&#xff0c;使得相邻两个整数之和均为素数。输出时&#xff0c;从整数 11 开始逆时针排列。同一个环恰好输出一次。n\leq 16n≤16&#xff0c;保证一定有解。 多…

day04-Maven-SpringBootWeb入门

文章目录 01. Maven1.1 课程安排1.2 什么是Maven1.3 Maven的作用1.4 Maven模型1.5 Maven仓库1.6 Maven安装1.6.1 下载1.6.2 安装步骤 2 IDEA集成Maven2.1 配置Maven环境2.1.1 当前工程设置2.1.2 全局设置 2.2 创建Maven项目2.3 POM配置详解2.4 Maven坐标详解2.5 导入Maven项目 …

【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)

一、介绍 弹性布局&#xff08;Flex&#xff09;提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴&#xff0c;子元素默认沿主轴排列&#xff0c;子元素在主轴方向的尺寸称为主轴尺寸&#xff0c;在交叉轴方向的尺寸称为交叉轴尺寸…

设计模式:软件开发的秘密武器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

20240310-1-Java后端开发知识体系

Java 基础 知识体系 Questions 1. HashMap 1.8与1.7的区别 1.71.8底层结构数组链表数组链表/红黑树插入方式头插法尾插法计算hash值4次位运算5次异或运算1次位运算1次异或运算扩容、插入先扩容再插入先插入再扩容扩容后位置计算重新hash原位置或原位置旧容量 (1) 扩容因子…

【吊打面试官系列】Java虚拟机JVM篇 - 关于JVM启动参数

大家好&#xff0c;我是锋哥。今天分享关于JVM启动参数的JVM面试题&#xff0c;希望对大家有帮助&#xff1b; 常用的JVM启动参数有哪些? JVM可配置参数已经达到1000多个&#xff0c;其中GC和内存配置相关的JVM参数就有600多个。 但在绝大部分业务场景下&#xff0c;常用的JV…

【C++】STL(二) string容器

一、string基本概念 1、本质 string是C风格的字符串&#xff0c;而string本质上是一个类 string和char * 区别&#xff1a; char * 是一个指针 string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 2、特点 1、stri…

Dockerfile的使用,怎样制作镜像

Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。 docker build命令参数&#xff1a; --build-arg&#xff0c;设置构建时的变量 --no-cache&#xff0c;默认false。设置该选项&#xff0c;将不使用Build …

地球系统模式(CESM)

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

23.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现配置工具数据结构

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;22.加载配置文件…

QML | 在QML中导入JavaScript资源、导入JavaScript资源、包含一个JavaScript 资源

01 在QML中导入JavaScript资源 JavaScript资源可以被QML文档和其他JavaScript通过相对或者绝对路径进行导入。如果使用相对路径,位置解析需要相对于包含import语句的QML文档或JavaScript资源的位置。如果JavaScript需要从网络资源中进行获取,组件的status属性会被设置为Loadi…

Extended Feature Pyramid Network for SmallObject Detection

摘要 各种尺度的特征耦合会削弱小对象的性能&#xff0c;本文中&#xff0c;我们提出了具有超高分辨率金字塔的扩展特征金字塔网络&#xff08;EFPN &#xff09;&#xff0c;专门用于小目标检测。具体来说&#xff0c;我们设计了一个新模块&#xff0c;称为特征纹理转移&#…

【C++】vector的使用及其模拟实现

这里写目录标题 一、vector的介绍及使用1. vector的介绍2. 构造函数3. 遍历方式4. 容量操作及空间增长问题5. 增删查改6. vector二维数组 二、vector的模拟实现1. 构造函数2. 迭代器和基本接口3. reserve和resize4. push_back和pop_back5. insert和erase5. 迭代器失效问题5. 浅…