当前位置: 首页 > news >正文

【贪心算法】洛谷P1106 - 删数问题

2025 - 01 - 22 - 第 46 篇
【洛谷】贪心算法题单 - 【贪心算法】 - 【学习笔记】
作者(Author): 郑龙浩 / 仟濹(CSND账号名)

目录

文章目录

  • 目录
  • P1106 删数问题
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 思路
    • 代码

P1106 删数问题

题目描述

键盘输入一个高精度的正整数 n n n(不超过 250 250 250 位),去掉其中任意 k k k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 n n n k k k,寻找一种方案使得剩下的数字组成的新数最小。

输入格式

输入两行正整数。

第一行输入一个高精度的正整数 n n n

第二行输入一个正整数 k k k,表示需要删除的数字个数。

输出格式

输出一个整数,最后剩下的最小数。

样例 #1

样例输入 #1

175438 
4

样例输出 #1

13

提示

len ⁡ ( n ) \operatorname{len}(n) len(n) 表示 n n n位数,保证 1 ≤ k < len ⁡ ( n ) ≤ 250 1 \leq k < \operatorname{len}(n) \leq 250 1k<len(n)250

思路

删除任意k个数字以后,如何保证是最小的数呢,如何去掉呢????
思路是这样的,从做往右(高位到低位)依次两两比较,如果 arr[ i ] <= arr[ i + 1 ], 则无需管,直到遇到 arr[ i ] > arr[ i + 1 ], 这时候需要将 arr[ i + 1 ] 去掉
说白了,就是尽量让这个数字保持升序,这样才能保证最小 --> 高位数字小 --> 则整个数字小

所以,去掉的数字一般分为两种情况

  1. 在 i ~ num - 1 的范围内, 【有】 arr[ i ] > arr[ i + 1 ] 的清况 --> 去掉arr[ i + 1 ]
  2. 在 i ~ num - 1 的范围内, 【无】 arr[ i ] > arr[ i + 1 ] 的清况 --> 去掉最后一位 --> 为什么是去掉最后一位呢,因为数字顺序为升序的时候,最右侧的数字是最大的,所以去掉
    ( 第 2 种情况 也无需再单独去判断了,因为内层循环中如果找不到arr[ i ] <= arr[ i + 1 ],退出循环的时候,i 会定位在 倒数第二个元素上面 )

最右侧的数字相当于 --> 整个高精度正数少了一位 + 少了最大的数

程序过程:

  1. 最外层循环:用来控制循环次数 --> 循环 k 次 --> 删掉 k 个数字
  2. 最内层循环:用来寻找 arr[ i ] < arr[ i + 1 ] 的情况,如果遇到,则退出循环,将 i 定位在 5 处( 比如 1 2 3 4 5 1 ),退出循环以后将 5 删除即可

借用的函数: erase(a, b) --> 删除函数 --> STL容器

高峰期–> 我的理解就是 从左往右依次两两比较,只要遇到不是 arr[ i ] <= arr[ i + 1 ] 而是 arr[ i ] > arr[ i + 1 ], 则 arr[ i ] 就是这个高峰期
简单点说,就是尽可能的让高位数字的顺序为升序 --> 因为 高位数字小, 则整个 高精度数字 就小

变量:
arr --> 存放高精度正整数
k --> 要删除的数字的数量
i --> 决定 高峰 的位置

代码

// 洛谷P1106 删数问题
// 作者: 郑龙浩 / 仟濹(CSDN)
// 时间:2025 - 01 -22
// 键盘输入一个高精度的正整数 n(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 n 和 k,
// 寻找一种方案使得剩下的数字组成的新数最小。// 看的这个大佬的题解,我才会这么做的 https://www.luogu.com.cn/article/qgschm0n// 思路:
// 删除任意k个数字以后,如何保证是最小的数呢,如何去掉呢????
// 思路是这样的,从做往右(高位到低位)依次两两比较,如果 arr[ i ] <= arr[ i + 1 ], 则无需管,直到遇到 arr[ i ] > arr[ i + 1 ], 这时候需要将 arr[ i + 1 ] 去掉
// 说白了,就是尽量让这个数字保持升序,这样才能保证最小 --> 高位数字小 --> 则整个数字小// 所以,去掉的数字一般分为两种情况
// 1. 在 i ~ num - 1 的范围内, 【有】 arr[ i ] > arr[ i + 1 ] 的清况 --> 去掉arr[ i + 1 ]
// 2. 在 i ~ num - 1 的范围内, 【无】 arr[ i ] > arr[ i + 1 ] 的清况 --> 去掉最后一位 --> 为什么是去掉最后一位呢,因为数字顺序为升序的时候,最右侧的数字是最大的,所以去掉
// ( 第 2 种情况 也无需再单独去判断了,因为内层循环中如果找不到arr[ i ] <= arr[ i + 1 ],退出循环的时候,i 会定位在 倒数第二个元素上面 )// 最右侧的数字相当于 --> 整个高精度正数少了一位 + 少了最大的数、
// 程序过程:
// 1. 最外层循环:用来控制循环次数 --> 循环 k 次 --> 删掉 k 个数字
// 2. 最内层循环:用来寻找 arr[ i ] < arr[ i + 1 ] 的情况,如果遇到,则退出循环,将 i 定位在 5 处( 比如 1 2 3 4 5 1 ),退出循环以后将 5 删除即可//借用的函数:erase(a, b) --> 删除函数 --> STL容器// 高峰期 --> 我的理解就是 从左往右依次两两比较,只要遇到不是 arr[ i ] <= arr[ i + 1 ] 而是 arr[ i ] > arr[ i + 1 ], 则 arr[ i ] 就是这个高峰期
// 简单点说,就是尽可能的让高位数字的顺序为升序 --> 因为 高位数字小, 则整个 高精度数字 就小// 变量:
// arr --> 存放高精度正整数
// k --> 要删除的数字的数量
// i --> 决定 高峰 的位置#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main( void ){string arr; // 表示的 高精度正整数int k; // 表示的 要删除的数字数量cin >> arr >> k;while( k ){// 寻找 高峰期int i;for( i = 0; arr[ i ] <= arr[ i + 1 ] && i < arr.size() - 1; i ++ ); // 非常简洁 --> 寻找 高峰期(第一次知道这个词语,从题解中看到的,因为我自己不知道用什么词语可以表达找到的这个元素)arr.erase( i, 1 ); // 从第 i 个位置连续删 1 个元素k --;}// 处理前导零 --> 如果本来的 高精度正整数 前面几个为0,则不能将其打出来, 应该将它们去掉while( arr [ 0 ] == '0' && arr.size() > 1 ) {//处理前导零, 并且保证如果数字为0,则必须保留一位0 arr.erase( 0, 1 );}cout << arr;return 0;
}

相关文章:

【贪心算法】洛谷P1106 - 删数问题

2025 - 01 - 22 - 第 46 篇 【洛谷】贪心算法题单 - 【贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 目录 文章目录 目录P1106 删数问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路代码 P1106 删数问题 题目描述 键盘输入一个高…...

WPS计算机二级•幻灯片的页面布局

听说这是目录哦 设置PPT页面尺寸&#x1f5bc;️PPT母版怎么用&#x1f3a8;巧用PPT母版统一修改 字体颜色与背景&#x1f3a1;如何快速更改应用 幻灯片中的不同母版&#x1f451;能量站&#x1f61a; 设置PPT页面尺寸&#x1f5bc;️ 在制作PPT时&#xff0c;我们需要先选定一…...

从入门到精通:HttpClient深度剖析与实战指南

一、引言 1.1 背景引入 在当今数字化时代&#xff0c;网络编程已成为软件开发中不可或缺的一部分。而 HTTP 通信作为网络编程的核心&#xff0c;承担着客户端与服务器之间数据传输的重任。无论是 Web 应用、移动应用&#xff0c;还是分布式系统&#xff0c;HTTP 协议都扮演着…...

IoTDB 2025 春节值班与祝福

2025 春节快乐 瑞蛇迎吉庆&#xff0c;祥光映华年&#xff0c;2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐&#xff0c;“蛇”来运转&#xff01; IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日&#xff0c;1 月 25 日、26…...

Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

【2024年华为OD机试】 (A卷,100分)- 整理扑克牌(JavaScriptJava PythonC/C++)

一、问题描述 题目描述 给定一组数字,表示扑克牌的牌面数字,忽略扑克牌的花色,请按如下规则对这一组扑克牌进行整理: 步骤1:分组形成组合牌 炸弹:当牌面数字相同张数大于等于4时。葫芦:3张相同牌面数字 + 2张相同牌面数字,且3张牌与2张牌不相同。三张:3张相同牌面数…...

周末总结(2024/01/25)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

Apache Flink 概述学习笔记

一、引言 在大数据处理领域&#xff0c;Apache Flink 是一个极具影响力的开源流批一体化计算框架&#xff0c;它以其独特的架构和强大的功能&#xff0c;为大规模数据处理提供了高效、灵活的解决方案。 二、基本概念 Flink 是什么&#xff1a;Flink 是一个分布式流批处理框架…...

双足机器人开源项目

双足机器人&#xff08;也称为人形机器人或仿人机器人&#xff09;是一个复杂的领域&#xff0c;涉及机械设计、电子工程、控制理论、计算机视觉等多个学科。对于想要探索或开发双足机器人的开发者来说&#xff0c;有许多开源项目可以提供帮助。这些项目通常包括硬件设计文件、…...

Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程

在 Linux 服务器上部署 Java 项目通常需要配置应用服务器&#xff08;如 Tomcat&#xff09;、数据库&#xff08;如 MySQL&#xff09;和缓存服务器&#xff08;如 Redis&#xff09;。本文将详细介绍如何在 Linux 环境中部署一个 Java 项目&#xff0c;涵盖 Tomcat、Redis 和…...

Django 多环境配置实战指南

在现代 Web 开发中,一个项目通常需要在多个环境中运行,例如开发环境、测试环境和生产环境。每个环境的配置可能不同,比如数据库连接、调试模式、密钥等。为了确保项目在不同环境中的灵活性和安全性,我们需要合理地管理多环境配置。 本文将详细介绍如何在 Django 项目中实现…...

【C++高并发服务器WebServer】-6:信号

本文目录 信号的概念1.1 core文件1.2 kill命令1.3 alarm函数1.4 setitimer调用1.5 signal捕捉信号1.6 信号集1.7 内核实现信号捕捉的过程1.8 sigaction1.9 sigchld 信号的概念 信号是 Linux 进程间通信的最古老的方式之一&#xff0c;是事件发生时对进程的通知机制&#xff0c…...

HBase的原理

一、什么是HBase HBase是一个分布式&#xff0c;版本化&#xff0c;面向列的数据库&#xff0c;依赖Hadoop和Zookeeper &#xff08;1&#xff09;HBase的优点 提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统 (2) HBase 表的特性 Region包含多行 列族包含多…...

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…...

Go学习:常量

变量&#xff1a;程序运行期间&#xff0c;可以改变的量&#xff0c;变量声明需要使用 var 常量&#xff1a;程序运行期间&#xff0c;不可以改变的量&#xff0c;常量声明需要使用 const 目录 1. 常量不允许修改 2. 常量赋值不使用 : 3. 常量能够自动推导类型 1. 常量不允许…...

Python 爬虫——爬取Web页面图片

从网页页面上批量下载jpg格式图片&#xff0c;并按照数字递增命名保存到指定的文件夹。 Web地址&#xff1a;http://p.weather.com.cn/2017/06/2720826.shtml#p1 import urllib import urllib.request import re #正则表达式#解析页面 def load_page(url):requesturllib.reque…...

微信小程序1.1 微信小程序介绍

1.1 微信小程序介绍 内容提要 1.1 什么是微信小程序 1.2 微信小程序的功能 1.3 微信小程序使用场景 1.4 微信小程序能取代App吗 1.5 微信小程序的发展历程 1.6微信小程序带来的机会...

记录备战第十六届蓝桥杯的过程

1.学会了原来字符串也有比较方法&#xff0c;也就是字符串987 > 98 等等&#xff0c;可以解决拼最大数问题 题目链接&#xff1a;5.拼数 - 蓝桥云课 (lanqiao.cn) 2.今天又复习了一下bfs&#xff0c;感觉还是很不熟练&#xff0c;可能是那个过程我些许有点不熟悉&#xff…...

AI 编程工具—Cursor进阶使用 Rules for AI

AI 编程工具—Cursor进阶使用 Rules for AI 这里配置是给所有的会话和内嵌模式的,你可以理解为是一个全局的配置 下面的代码是之前Cursor 给我们生成的,下面我们开始配置Rules ,来让Cursor生成的代码更加符合我们的编程习惯 def quick_sort(arr):"""使用快…...

以租赁合同的例子讲清楚 开源协议原理和区别

开源协议通俗易懂的方式介绍清楚原理和区别 开源协议其实就是软件的“使用规则”&#xff0c;决定了别人可以如何使用、修改、分享你的代码。通俗一点说&#xff0c;如果你写了一段代码&#xff0c;开源协议就是告诉别人在什么条件下他们可以使用你的代码&#xff0c;以及他们可…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...