题解 | #最大值#

最大值

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

最大值

题目描述

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

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

函数传入一个长度为 n 的字符串 s 和一个正整数k,请你返回答案。

方法一:枚举法

解题思路

对于本题目的求解,直接对每个位置进行枚举,并在枚举过程中记录最大值的起始位置,最后得到结果。

alt

解题代码

class Solution {
public:
    int maxValue(string s, int k)
    {
        int i0 = 0; // 最大的起始点
        for(int i = 1;i + k < s.length();i++)
        {
            for(int j =0;j<k;j++)
            {
                if(s[i0+j] > s[i+j]) break; // 原来的更大
                if(s[i0+j] < s[i+j]) { // 新的更大
                    i0 = i; // 更新最大起始点
                    break;
                }
            }
        }
        return stoi(s.substr(i0,k)); // 返回结果
    }
};

复杂度分析

时间复杂度:两层循环,因此时间复杂度为O(kn)O(k*n),其中n为字符串长度,k为题目所给的正整数。

空间复杂度:使用常数级内存地址空间,因此空间复杂度为O(1)O(1)

方法二:滑动窗口的方法

解题思路

初始化一个大小为k的区间,然后利用区间,循环右移,计算区间数值,并保存最大值。

alt

解题代码

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;//返回结果
    }
};

复杂度分析

时间复杂度:一层循环,因此时间复杂度为O(n)O(n),其中n为字符串长度。

空间复杂度:使用常数级内存地址空间,因此空间复杂度为O(1)O(1)

算法 文章被收录于专栏

算法题的题解以及感受

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3751次浏览 45人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16896次浏览 137人参与
# 巨人网络春招 #
11520次浏览 224人参与
# 春招至今,你的战绩如何? #
15630次浏览 144人参与
# 你的实习产出是真实的还是包装的? #
2964次浏览 52人参与
# 沪漂/北漂你觉得哪个更苦? #
1513次浏览 40人参与
# 米连集团26产品管培生项目 #
7278次浏览 226人参与
# HR最不可信的一句话是__ #
1078次浏览 32人参与
# AI面会问哪些问题? #
935次浏览 23人参与
# 你做过最难的笔试是哪家公司 #
1228次浏览 22人参与
# AI时代,哪个岗位还有“活路” #
2814次浏览 51人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152901次浏览 889人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8007次浏览 43人参与
# XX请雇我工作 #
51155次浏览 171人参与
# 简历第一个项目做什么 #
32131次浏览 360人参与
# 简历中的项目经历要怎么写? #
311028次浏览 4264人参与
# 投格力的你,拿到offer了吗? #
178337次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
76978次浏览 375人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187585次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64704次浏览 883人参与
# 如果重来一次你还会读研吗 #
230010次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364336次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务