反轉0,但應該使得到的1數量最大

該題目是在線筆試時遇到的。題目的正式描述爲:給定一個全部由0和1組成的字符串,並可以把0變換成1,但變換的次數最多爲sec次,求經過變換後連續1的最大個數。

#include<iostream>
#include<string.h>
using namespace std;
int find(int *num, int start, int end)
{
    int count = 0;
    for(int iter = start; iter <= end; iter++)
    {
        if(num[iter]==0)
            count++;
    }
    return count;
}
int main()
{
    int fir,sec;
    cin>>fir>>sec;
    int num[fir];
    for(int iter = 0; iter < fir; iter++)
        cin>>num[iter];
    int max_length = sec;
    int now_len = 0;
    int tag;
    for(int it = sec-1; it < fir; it++)
    {
        int length = sec;//每處都設長度爲sec
        now_len = find(num,it+1-sec,it);//找到該區間內的0的個數;
        tag = it;//上次結束的標記
        it++;//從下一個開始
        do
        {
            if(num[it] == 0)//保證0的個數小於sec時,可以有最後一次的調整。
                now_len++;
            length++;
            it++;
        }
        while(now_len < sec && it < fir); //在最後一個0處截止,保證now_len達到最大
        do
        {
            if(num[it]==1)
                length++;
            else
                break;
            it++;
        }
        while(it<fir); //0後繼續查找連續的1
        it = tag;//求出可能的長度後,還原到原位置;
        if (length > max_length)
            max_length = length;
    }
    cout<<max_length;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章