第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 这种均匀序列),则删除最后一个元素就好了。
相关推荐
codeの诱惑2 分钟前
推荐算法(一):数学基础回顾——勾股定理与欧氏距离
算法·机器学习·推荐算法
落樱弥城3 分钟前
Vulkan Compute 详解
算法·ai·图形学
老约家的可汗3 分钟前
list 容器详解:基本介绍与常见使用
c语言·数据结构·c++·list
Book思议-4 分钟前
【数据结构】字符串模式匹配:暴力算法与 KMP 算法实现与解析
数据结构·算法·kmp算法·bf算法
客卿12331 分钟前
动态规划--模板--完全背包
算法·动态规划
L-影37 分钟前
下篇:一棵树能长成多少种样子?——AI中决策树的类型与作用,以及它凭什么活了六十年还没过气
人工智能·算法·决策树·ai
mifengxing38 分钟前
力扣HOT100——(1)两数之和
java·数据结构·算法·leetcode·hot100
無限進步D42 分钟前
算竞常用STL cpp
开发语言·c++·算法·竞赛
仟濹1 小时前
【算法打卡day34(2026-03-30 周一)】DFS专项训练(今日算法:DFS & 记忆化搜索 & 回溯)
算法·深度优先
罗湖老棍子1 小时前
【 例 1】区间和(信息学奥赛一本通- P1547)(基础线段树和单点修改区间查询树状数组模版)
数据结构·算法·线段树·树状数组·单点修改 区间查询