news 2026/7/6 14:49:14

题解:学而思编程 数字卡片

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
题解:学而思编程 数字卡片

【题目来源】

学而思编程:数字卡片

【题目描述】

小猴收集了n nn张数字卡片,每一种数字卡片小猴恰好只有一张且都在1 ∼ n 1\sim n1n的范围内。

因为小猴加的猫咪贪玩,打翻了装着数字卡片的盒子,经过千辛万苦小猴终于把卡片捡起来装到盒子,但是发现少了一张数字卡片。

已知小猴现在盒子中的卡片分别是a 1 , a 2 , … , a n − 1 a_1,a_2,\dots,a_{n-1}a1,a2,,an1,请你帮助小猴找出缺少的那一张数字卡片,并输出对应卡片上的数字。

【输入】

第一行包含一个整数n nn

第二行包含n − 1 n-1n1个整数a 1 , a 2 , … , a n − 1 a_1,a_2,\dots,a_{n-1}a1,a2,,an1

【输出】

一行一个整数,表示缺少的是哪一张数字卡片。

【输入样例】

5 4 3 2 1

【输出样例】

5

【核心思想】

  1. 问题分析:给定1 11n nn范围内的n − 1 n-1n1个互不相同的数字,找出缺失的那个数字。这是一个标记数组问题,关键在于利用值域有限且唯一的特性,通过标记出现过的数字快速定位缺失值。

  2. 算法选择

    • 布尔标记数组f[i]表示数字i ii是否出现在输入中
    • 线性扫描查找:遍历1 11n nn,找到未被标记的数字即为缺失值
  3. 关键步骤

    • 初始化:读取n nn
    • 标记出现数字
      • 遍历i ii1 11n − 1 n-1n1
        • 读取x xx
        • f[x] = true:标记数字x xx已出现
    • 查找缺失数字
      • 遍历i ii1 11n nn
        • !f[i]i ii未出现):输出i ii并结束
  4. 时间/空间复杂度

    • 时间复杂度:O ( n ) O(n)O(n),两次线性遍历
    • 空间复杂度:O ( n ) O(n)O(n),布尔标记数组f[1..n]
  5. 标记数组的核心思想

    • 值域确定性:数字范围固定为1 11n nn,且每个数字恰好出现0 001 11次,适合用数组下标直接映射
    • 缺失即未标记:完整集合与给定集合的差集只有一个元素,扫描标记数组即可找到
    • 空间换时间:用O ( n ) O(n)O(n)空间实现O ( n ) O(n)O(n)时间,避免排序或求和的O ( n log ⁡ n ) O(n \log n)O(nlogn)O ( n ) O(n)O(n)但需处理溢出的方案
    • 扩展性:若值域过大可用unordered_set,但本题值域适中,数组更高效
    • 适用于"有限值域内缺失元素查找"类问题,标记数组是最直观高效的解法

【算法标签】

#模拟

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;boolf[1000005];// 布尔数组,标记出现的数字intmain(){intn;cin>>n;// 输入nfor(inti=1;i<=n-1;i++)// 输入n-1个数{intx;cin>>x;f[x]=true;// 标记x出现过}for(inti=1;i<=n;i++)// 从1到n查找{if(!f[i])// 如果i没出现过{cout<<i;// 输出缺失的数break;// 找到后结束}}return0;}

【运行结果】

5 4 3 2 1 5
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 14:48:47

Gazebo仿真PX4+3D激光雷达的搭建

Gazebo仿真无人机3D激光雷达的搭建 系统要求&#xff1a;Ubuntu22、24及以上版本。 以PX4开源工程为基础&#xff0c;先参考官方文档 https://docs.px4.io/main/en/sim_gazebo_gz/ 搭建基本的Gazebo无人机仿真&#xff0c;注意安装Gazebo而非老版本Gazebo classic。跑通make …

作者头像 李华
网站建设 2026/7/6 14:47:46

扫描电子显微镜(SEM):EBIC/EBAC成像的基本原理、技术及应用案例

电子束感应电流 (EBIC) 和电子束吸收电流 (EBAC) 是除二次电子 (SE) 和背散射电子 (BSE) 成像外&#xff0c;还可用于电子显微镜的成像技术。EBAC 通过图像对比度显示样品中的电流路径。它用于检测电气设备中的短路和断路。同样&#xff0c;EBIC 显示样品中的电场&#xff0c;主…

作者头像 李华
网站建设 2026/7/6 14:46:07

HAL_Delay 为什么不能在中断里调?

前言很多 STM32 新手写过这样的代码&#xff1a;void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {HAL_Delay(50); // 按键消抖HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); }下载后发现&#xff1a;按键按下去&#xff0c;程序卡死了。为什么 HAL_Delay 在 main 循环里用得…

作者头像 李华
网站建设 2026/7/6 14:44:11

KMX62与PIC18F45K22在嵌入式运动控制中的优化应用

1. 为什么选择KMX62与PIC18F45K22组合在嵌入式运动控制领域&#xff0c;传感器与微控制器的选型往往决定了整个系统的性能上限。KMX62作为一款集成三轴加速度计和三轴磁力计的6DOF IMU传感器&#xff0c;与PIC18F45K22这款8位微控制器的组合&#xff0c;在成本、性能和功耗之间…

作者头像 李华
网站建设 2026/7/6 14:40:17

什么是*Bash* *循环*的正确用法?

循环结构存在于每种编程语言中,包括 Bash。循环是 shell 脚本中的重要构建块,它允许迭代执行一段代码。Bash 循环结构包括 for 循环、while 循环和 until 循环。 👉 有时,你可能会看到 bash 中 select 循环 的引用。它不属于 bash 循环结构 的一部分。你可以在我的博文 《…

作者头像 李华
网站建设 2026/7/6 14:37:26

模板基础与 SFINAE

模板基础与 SFINAE 1. 函数模板与类模板的区别 面试题&#xff1a;函数模板和类模板在使用上有什么关键区别&#xff1f; 函数模板支持模板参数推导——调用时不需要指定模板参数&#xff0c;编译器根据实参类型自动推导&#xff1a; #include <iostream> #include <t…

作者头像 李华