第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 这种均匀序列),则删除最后一个元素就好了。
相关推荐
CoovallyAIHub2 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库2 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语07162 小时前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法
哈里谢顿17 小时前
跳表(Skip List):简单高效的有序数据结构
数据结构
CoovallyAIHub1 天前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
有意义1 天前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
用户726876103371 天前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect1 天前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript