網易面試題 調整隊形

2021-07-30 02:35:45 字數 2151 閱讀 7659

在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為(0~n-1)。其中有一些是男生,有一些是女生,男生用』b』表示,女生用』g』表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整,每次調整只能讓相鄰的兩個小朋友交換位置,現在需要盡快完成隊伍調整,你需要計算出最少需要調整多少次可以讓上述情況最少。例如:

ggbbg -> ggbgb -> gggbb

這樣就使之前的兩處男女相鄰變為一處相鄰,需要調整隊形2次

輸入描述:

輸入資料報括乙個長度為n且只包含g和b的字串.n不超過50.

輸出描述:

輸出乙個整數,表示最少需要的調整隊伍的次數

輸入例子:

ggbbg

輸出例子:

2

解:最後矛盾最少的狀態只可能是男生和女生分別在兩邊,最多只有中間乙個男生挨著女生,所以總共有兩種方式:男生全部在座女生全部在右;女生全部在坐男生全部在右。

演算法:所以分兩種情況:把男生全部移到左邊;把女生全部移到左邊。再從兩個數中求乙個最小值即可。在移動的時候可以用乙個游標記錄一次需要移動的位置次數,這樣會簡化移動過程,不需要每次只能移動一步。

int adjustformation(const char * formation, int size)

else

}int minchangetimes, boymove, girlmove;

boymove = girlmove = 0;

int tempchangingtimes = 1;

//move boy

for (int i = 0; i < size; ++i) else

//no boys behind

if (tempchangingtimes + i >= size)

//change formation for tempchangingtimes

formboymove[i] = true;

formboymove[i+tempchangingtimes] = false;

boymove += tempchangingtimes;

//reset tempchangingtimes

tempchangingtimes = 1;}}

//reset tempchangingtimes

tempchangingtimes = 1;

//move girl

for (int i = 0; i < size; ++i) else

//no girls behind

if (tempchangingtimes + i >= size)

//change formation for tempchangingtimes

formgirlmove[i] = false;

formgirlmove[i+tempchangingtimes] = true;

girlmove += tempchangingtimes;

//reset tempchangingtimes

tempchangingtimes = 1;}}

minchangetimes = min(boymove, girlmove);

return minchangetimes;

}

//

// main.cpp

// adjustformation

//// created by jiajie zhuo on 2017/4/7.

//#include #define maxnumber 50

using namespace std;

int adjustformation(const char * formation, int size);

int main(int argc, const char * argv)

簡化問題的關鍵點即是用乙個游標記錄下乙個男生(女生)的的位置,這樣可以一次移動多步。

網易2017演算法題 調整隊形

題目是這樣的 在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上...

演算法調整隊形

來自 2017 年網易春招筆試題三 在幼兒園有 n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情...

網易2017春招筆試 調整隊形

題目 在幼兒園有n個小朋友排列為乙個隊伍,從左到右乙個挨著乙個編號為 0 n 1 其中有一些是男生,有一些是女生,男生用 b 表示,女生用 g 表示。小朋友們都很頑皮,當乙個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。你只能在原隊形上進行調整...