1. 程式人生 > >二進位制串中連續出現的0或1的最大次數

二進位制串中連續出現的0或1的最大次數

今天下午到Worksapplicatin去面試了,本來是明天上午的面試,因為和華為的機試時間衝突了,就打電話給負責人希望另選時間,誰知他讓我馬上就過去(面試的地方就在學校旁邊的酒店裡),只好匆匆忙忙拿著簡歷趕到了面試的地方。這家公司是一家外企,面試過程都是採用英文交流的。這是讀研究生以來第一次參加正式的面試,很緊張,也很匆忙。面試過程大概持續了40分鐘,面試官是一個日本人,應該屬於技術中層管理者一類的角色。面試過程也很簡單,沒有想象中的那麼嚴肅,一個簡單的英文自我介紹,然後就是現場程式設計(限時30分鐘)。面試結果基本是掛掉了,因為程式設計題沒能最後做出來,平時訓練的少,也是自己能力不足吧。

其實這次實習生的面試主要是去積攢經驗的,下半年就要開始找工作了,再過一年多就要徹底和學生時代說再見了,馬上要從學生轉變為職場新人。面試不是很順利,只希望通過這樣一次次的失敗認清自己的不足,有針對性的去努力提升自己,讓自己距離一個理想中的offer越來越近。總結一下這次面試,自己的不足主要有以下幾個方面,1. 和麵試官的交流不夠,表達能力和英語口語能力都要加強。面試的時候儘量放輕鬆自然,面試官沒有那麼可拍,表現得得體自然有禮貌最重要。2. 現場寫程式碼的能力。 這是最重要的地方,還是基礎不夠紮實,資料結構和演算法這些東西落下很久了,如果有志於成為一個碼農,那就多寫程式碼吧,沒有捷徑可以走。熟能生巧,自己還是平時寫程式碼寫的太少了,只有寫過足夠多的程式碼,才能對問題有深刻的認識,對程式碼駕輕就熟。否則,一切停留在表面,都是扯淡的。 3. 儀表,精氣神方面要注意。 雖然說程式猿面試不一定要穿正裝,但是衣著要得體,特別是精氣神要好,說話音量要控制好。要給人一種經歷充沛的感覺,這樣別人才會有興趣和你聊下去。 其他的也沒什麼好說的,自己能力不足,也怨不得別人,成功沒有捷徑可走,coding,coding再coding! 現在把自己面試的題目貼上來,題目真心不是很難,程式碼量也不大,就是自己平時程式碼寫少了,練得不夠。

Worksapplication面試題(三個裡面做一個,面試官指定,我的是第二個)。題目是英文的,中文大意是:有一個二進位制的字串,要求輸出連續出現0或1次數最多的子串。自己回來總結查了一些資料後,程式碼如下:

#include <iostream>

using namespace std;

int longestSeq(char* seq, int n, int &longest)
{
    int count_0 = 0,count_1 = 0;
    int max_0 = 0, max_1 = 0;

    for(int i = 0; i < n; ++i)
    {
        if(seq[i] == '0')
        {
            count_0++;
            count_1 = 0;
        }
        else if(seq[i] == '1')
        {
            count_1++;
            count_0 = 0;
        }
        if(count_0 >= max_0)
            max_0 = count_0;
        if(count_1 >= max_1)
            max_1 = count_1;
    }
    //the continue occurs longest seq is '1'
    if(max_1 > max_0)
    {
        longest = max_1;
        return 1;
    }
    //the continue occurs longest seq is '0'
    else if(max_1 < max_0)
    {
        longest = max_0;
        return -1;
    }
    // both '0' and '1' have the longest continue occur times
    else
    {
        longest = max_0;
        return 0;
    }

}

int main()
{
    char seq[] = "111000010111110";
    int longestSequence = 0;
    int bin = longestSeq(seq,15,longestSequence);
    if(bin == 1)
    {
        for(int i = 0; i < longestSequence; ++i)
            cout << 1;
    }
    else if(bin == -1)
    {
        for(int i = 0; i < longestSequence; ++i)
            cout << 0;
    }
    else
    {
        for(int i = 0; i < longestSequence; ++i)
            cout << 1;
       cout << " ";
        for(int i = 0; i < longestSequence; ++i)
            cout << 0;
    }

    return 0;
}

其實自己當時思路不清晰,東想西想,主要是積累太少了。函式的實現是最重要的。下面是不用C風格字串,用C++的string字串類的實現:

#include <iostream>
#include <string>

using namespace std;

int longestStr(const string& binSeq, int &longest)
{
    int count_0 = 0, count_1 = 0;
    int max_0 = 0,max_1 = 0;

    for(int i = 0; i < binSeq.length(); ++i)
    {
        if(binSeq[i] == '0')
        {
            count_0++;
            count_1 = 0;
        }
        else if(binSeq[i] == '1')
        {
            count_1++;
            count_0 = 0;
        }

        if(max_0 < count_0)
            max_0 = count_0;
        if(max_1 < count_1)
            max_1 = count_1;
    }

    //'1' has the longest continue occur times
    if(max_1 > max_0)
    {
        longest = max_1;
        return 1;
    }
    //'0' has the longest continue occur times
    else if(max_1 < max_0)
    {
        longest = max_0;
        return -1;
    }
    //both '0' and '1' have the longest continue occur times
    else
    {
        longest = max_0;
        return 0;
    }
}

int main()
{
    string str = "11100001111010";
    int longest;
    int bin = longestStr(str,longest);
    if(bin == 1)
    {
        for(int i = 0; i < longest; ++i)
            cout << 1;
    }
    else if(bin == -1)
    {
        for(int i = 0; i < longest; ++i)
            cout << 0;
    }
    else
    {
        for(int i = 0; i < longest; ++i)
            cout << 0;

        cout <<" ";

        for(int i = 0; i < longest; ++i)
            cout << 1;
    }
    return 0;
}



任重而道遠啊,現在是實習招聘,抓緊時間鍛鍊,為早日拿到offer而努力吧,既然選擇了程式猿,就不停的coding吧!