题解 | #最大值#

最大值

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

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









全部评论

相关推荐

牛客12345698:今天找工作妥协了,以后找对象的时候是否要妥协?以后多久要娃要不要妥协?要是头胎不是儿子是不是要再生个儿子?你不会以为他们就插手一件事吧。 举个例子,我一个亲戚家,独子,从小到大游手好闲不务正业,赌博把家产败光了大部分(虽然也不是啥有钱人,二三十万吧)。后面算是改正了,找了个正经工作,一个月四五千,老老实实过日子。他在家就是说一不二。他爹妈还贼知足,说还好他改了。 这时候你可能会被所谓的道德、孝顺给限制,但你好好想想: 1、对你而言,你重要还是你父母重要,不需要回答我,扪心自问。 2、这件事在你的三观里是否是不孝。孝顺与否的定义权是在谁手里? 我建议你按自己的想法度过,说实话,你如果考公或者找了国企,大概率会埋怨父母一辈子。毕竟每个工作都有好有坏,到时候你会自然地把这个工作的所有坏处归咎到父母头上。可能不会有大的爆发,但始终是亲子关系的隐患。
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务