题解 | 小红的01子序列构造(easy)

小红的01子序列构造(easy)

https://www.nowcoder.com/practice/ee0b6c6baa2642c182df8b4390126f9a

解法参考评论区大佬,虽然用例全能pass,但有个小疑问,l++使num减少,r++使num增大,这样一来一回的过程会不会让num错过k值?

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;

int main() {
    ll n, k;
    cin >> n >> k;
    string s;
    cin >> s;
    ll l = 0, r = 0; //滑动窗口的左右边界
    ll zero = 0, one = 0; //用来记录区间里面0和1的数量
    ll num = 0; //01子序列的个数

    (s[0] == '0') ? ++zero: ++one; //初始化

    while(l < n && r < n) {
        if(num == k) {
            cout << l+1 << " " << r+1 << endl;
            return 0;
        } else if(num < k) { //01对太少了则将窗口右边界增大
            ++r;
            if(s[r] == '0') ++zero;
            else { //为'1'
                num += zero;
                ++one;
            }
        } else { //太多了则将窗口左边界增大
            if(s[l] == '1') --one;
            else {
                num -= one;
                --zero;
            }
            ++l;
        }
    }
    cout << -1 << endl;
    return 0;
}

全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
我知道自己这个念头不好,但是真的很羡慕😭大家的父母长辈都能帮到自己吗?
大飞的诡术妖姬:父母都是普通打工人,身体也不好,能供我读到本科毕业很不容易,毕业以后帮衬心里会有罪恶感。虽然可能会错过很多风景,但还是想活的心安理得。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务