CSDN(成长一夏竞赛)- 最大数

Posted 放羊的牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN(成长一夏竞赛)- 最大数相关的知识,希望对你有一定的参考价值。

题目大意

给定任意一个数字 m,然后给出数字 n,则需在 m 中去掉 n 位数,保持各位顺序不变的情况下,得到最大数。

输入描述

输入整数n,m (1<=n<=1e100,1<=m<=100)

输出描述

输出删除后的最大数。

示例 

输入:1234 2

输出:34

解题思路

  1. 计算出结果坑位数(size = n.length - m)
  2. 每一个坑位数的最大值下标[0, size]、[0, size + 1]、[0, size + 2]……
  3. 最难理解在第二点,因为题目说保障前后顺序,所以比如 12345 2,那么,坑位数为 3,第一个位置的最大值在[0, 2],第二个[0, 3],第三个[0, 4],中途如果被用过的数字需要做下标记,后面的坑位不能再使用

相关企业

  • CSDN

AC 代码

import java.util.ArrayList;
import java.util.Scanner;

public class Main 

    public static void main(String[] args) 
        Scanner scan = new Scanner(System.in);

        String str_0 = scan.nextLine();
        String[] line_list_0 = str_0.trim().split(" ");
        ArrayList<String> arr = new ArrayList<>();
        for(int i = 0; i < line_list_0.length; i++)
            arr.add(line_list_0[i]);
        


        scan.close();

        String result = solution(arr);

        System.out.println(result);

    

    public static String solution(ArrayList<String> arr)
        String str = arr.get(0);
        int cnt = Integer.valueOf(arr.get(1));
        int len = str.length();
        int diff = len - cnt;
        char[] chars = new char[diff];
        char[] pre = str.toCharArray();

        for (int i = 0, from = 0; i < diff; i++) 
            // j = from,优化,因为下一个坑位数不可能在 from 之前
            for (int j = from; j <= cnt + i; j++) 
                if (chars[i] < pre[j]) 
                    chars[i] = pre[j];
                    from = j + 1;
                
            
        

        return String.valueOf(chars);
    

以上是关于CSDN(成长一夏竞赛)- 最大数的主要内容,如果未能解决你的问题,请参考以下文章

成长一夏 挑战赛来袭 | 学习创作两大赛道,开启导师报名啦!

成长一夏 挑战赛来袭 | 学习创作两大赛道,开启导师报名啦!

《算法竞赛指南》GF与猫咪的关系

首届湖北省大学程序设计竞赛I题(可持久化trie)

TJOI2018 智力竞赛

CSDN编程竞赛 ——— 第二十一期