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

网友投稿 531 2022-08-31

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

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

题目大意

给定任意一个数字 m,然后给出数字 n,则需在 m 中去掉 n 位数,保持各位顺序不变的情况下,得到最大数。输入描述输入整数n,m (1<=n<=1e100,1<=m<=100)输出描述输出删除后的最大数。示例 输入:1234 2输出:34

解题思路

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

相关企业

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 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 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); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么简单实现菜单拖拽排序的功能
下一篇:Go语言开发环境搭建详细教程(go语言web开发教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~