题解 | #最大值#

最大值

http://www.nowcoder.com/practice/c0a95c1c30e94dc190e6acc42cb06930

题意:
        有一个只由字符'1'到'9'组成的长度为 n 的字符串 s ,现在可以截取其中一段长度为 k 的子串并且将该子串当作十进制的正整数,如对于子串"123",其对应的十进制数字就是123 。

        如果想让这个正整数尽可能的大的话,问该正整数最大能是多少。

方法一:
暴力枚举

思路:
        外层循环暴力遍历字符串,枚举起点;
        内层循环计算区间长度为 k 的值,并且维护最大值。

class Solution {
public:
    
    int maxValue(string s, int k) {
        int len=s.size();
        int res=0;
        for(int i=0;i<len-k+1;i++){//枚举起点
            int x=0;
            for(int j=i;j<i+k;j++){//计算长度为k的数
                x=x*10+s[j]-'0';
            }
            res=max(res,x);//维护最大值
        }
        return res;
    }
};


时间复杂度:
空间复杂度:


方法二:
滑动窗口

思路:
        首先,初始化长度为 k 的区间;
        然后,利用滑动窗口,循环右移,并计算数值且维护最大值。
        
        

class Solution {
public:
    
    int maxValue(string s, int k) {
        int len=s.size();
        int res=0,x=0;
        int t=pow(10,k-1);//取余的数
        int r=0;//右指针
        while(r<len){
            if(r<k){//初始化长度为k的区间
                x=x*10+s[r++]-'0';
            }else{
                res=max(res,x);//维护最大值
                x=x%t;
                x=x*10+s[r++]-'0';
            }
        }
        res=max(res,x);//维护最大值
        return res;
    }
};

时间复杂度:
空间复杂度:









全部评论

相关推荐

04-21 13:50
已编辑
北京理工大学 硬件测试
我们学校连夜发了声明,绝了绝了!看完了全部ppt,震碎三观。一般情况下我是站学生的,但这不是一般情况。这男的不能被取消学位吗?自己吃到了红利,靠着面试泄题得到的保研,又反手举报导师。这导师是《被举报系列》里最惨最恋爱脑的了,当然最可怜的是他的同妻……
牛客小黄鱼:看了ppt的聊天记录,真不知道谁才是受害者!有人为你剥过柚子吗?有人为你雪地里等你吗?有人为你写过情书吗?有人为你规划未来吗?有人为你小心翼翼吗?有人为你整页失眠失眠吗? 有人为你送上自己的科研成果吗?有人为你安排出国留学吗?有人愿意给你一个月2万吗?
点赞 评论 收藏
分享
03-03 14:35
莆田学院 Java
点赞 评论 收藏
分享
工科女的日常:真诚建议:别再用这种花哨的模板,可以看看我发的那个零经验找实习发帖子
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务