第40题——删除数最大(贪心): 给你一个整数 n,使得从 n 中删除 k 个数字之后的数字最大。

复制代码
题目描述

给你一个整数 n,使得从 n 中删除 k 个数字之后的数字最大。

输入
输入一个整数 n (0 <= n <= 10^100),和需要删除数字 k <= 100的个数

输出
输出删除k个数字之后的最大整数
cpp 复制代码
#include<stdio.h>
#include<string.h>
int main(){
    char n[1000];int k,i,t,len;
    while(scanf("%s%d",&n,&k)!=EOF){
    //while(~scanf("%s%d",&n,&k)){
        len=strlen(n);//获取字符串长度
        while(k--){
            for(i=0;i<len-1;i++) {
                if (n[i] < n[i + 1]) {
                    break;
                } //从最高位开始找,找到到高位小于低位的 就跳出
            }
            while(i+1<len){
                n[i]=n[i+1],i++;//通过移位覆盖法删掉应该移除的元素。(之后就相当于要移除最后一个元素)
            }
            len--;//字符串长度减少 (若应该去除最后一个元素 ,直接 长度减少)
        }
        n[len]=0;
        printf("%s\n",n);
    }
    return 0;
}
复制代码
通过贪心的方法:
根据题意, 就是删除k个数字 保持原序列顺序不变的情况 下,使得 剩下的数字组成的最大。
我们一般比较一个数的大小,是怎么比的 ,比如 8999 9000 ,是不是先看最高位,
第一个数最高位为8 第二个数最高位为9,那么后面根本就不用关心。所以一个数大不大 由高位决定。
最高位相同,比次高位,依次类推。因此此题可以按以下步骤解决。
1.从最高位 开始找,找相邻的两个数中,高位的数字小于低位的数字,则应该把 高位的数字删掉,
2.如果是一个原序列是一个递减序列(或者 全为 11111 这种均匀序列),则删除最后一个元素就好了。
相关推荐
2601_967760783 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
不会就选b4 小时前
算法日常・每日刷题--<贪心>7
数据结构·算法·leetcode
moonrailgun4 小时前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法
罗西的思考5 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(1)--- 总体
人工智能·算法·机器学习
lvwangshu6 小时前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
爱吃苹果的日记本6 小时前
数据结构第一课
c语言·数据结构·数据库·学习·c#
张小姐的猫6 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
302wanger6 小时前
干与湿:AI 拿走脑力之后,人剩下什么
算法
计算机编程-吉哥7 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
用户204937554958 小时前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法