C++| 通俗逻辑题解

刷墙

http://www.nowcoder.com/questionTerminal/748b891f208744a7b1f98cb4c45bde11

逻辑比较好想,刷两遍

vector blue,res记录在每一格需要刷的红蓝数量

blue从左开始,看见0就说明要刷,blue[i] = blue[i]+1

red从右开始,看见1就++;

然后计算min(blue[i]+red[i], res),找出在哪一格,需要刷的墙最少

最后将res--,这是因为在i点,蓝的要刷成蓝,红的要刷红肯定重复刷了一次,所以减去1

int main() { 
    int n;
    cin >> n;
    string arr;
    cin >> arr;
        
    // 左蓝右红,蓝1红0
    // 需要刷蓝的个数
    vector<int> blue(n,0);
    for(int i = 0; i < n; i++) {
        if(i == 0)
            blue[0] = (arr[0] == '0');
        else
        {
            if(arr[i] == '0')
                blue[i] = blue[i-1]+1;
            else
                blue[i] = blue[i-1];
        }
    }
    
    // 需要刷红的个数
    vector<int> red(n,0);
    for(int i = n-1; i >= 0; i--) {
        if(i == n-1)
            red[n-1] = (arr[n-1] == '1');
        else
        {
            if(arr[i] == '1') 
                red[i] = red[i+1] + 1;
            else
                red[i] = red[i+1];
        }
    }
    
    int res = INT_MAX;
    for(int i = 0; i < n; i++) {
        res = min(res, blue[i] + red[i]);
    }
     
    res--;
    
    cout << res << endl;
}
全部评论

相关推荐

zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务