搜狐笔试:保留最大的数

搜狐笔试:保留最大的数(只能过50%的测试用例)

题目描述

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
输入描述:
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 1000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。
输出描述:
输出保留下来的结果。
示例1
输入

325
1
输出

35

思路:

从头扫描数字325,找到第一个“上升”的数,即 arr[i] < arr[i+1] 。325中第一个“上升”的数为2,2->5,删掉2。然后剩下35,则再次从头扫描,删掉第一个“上升”的数3,最后剩下5。

如果找不到上升的数,说明数字是递减的,诸如54321这样的数,那么每一次就从最后一个数开始删,这样能保证删完的结果是最大的。

然而思路是这个思路,测试用例只能跑到50%。下面是50%的代码。

import java.util.*;

public class Main {
     public static String solution(String n, int m) {
        StringBuilder sb = new StringBuilder(n);
        int len = sb.length();
        while(m > 0) {
            int index = 0;
            boolean flag = true;
            for(int i = 0; i < len - 1; i++) {
                char c = sb.charAt(i);
                char d = sb.charAt(i+1);
                if(c < d) {
                    index = i;
                    flag = false;
                    break;
                }
            }
            if(flag) {
                while(m > 0) {
                    sb.deleteCharAt(len-1);
                    len--;
                    m--;
                }
                return sb.toString();
            }else {
                sb.deleteCharAt(index);
            }
            m--;
            len--;
        }
        return sb.toString();
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String n = sc.nextLine().trim();
        int m = sc.nextInt();
        System.out.println(solution(n, m));
    }
}

附上大佬们AC的代码,膜拜啊
https://www.nowcoder.com/profile/3656619/codeBookDetail?submissionId=16108171
来源:牛客网 @超蓝の悟空

#include<string>
#include<iostream>
using namespace std;
int main(){
    string s;
    int len,i;
    while(cin>>s>>len){
        i=1;
        while(len--){
            int slen=s.length();
            for(i--;i<slen-1;i++)
                if(s[i]<s[i+1]){
                    s.erase(s.begin()+i);
                    break;
                }
            if(i==slen-1) s.erase(s.end()-1);
        }
        cout<<s<<endl;
    }
}

注:学渣心里苦,不要学楼主,平时不努力,考试二百五,哭~

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值