網易2017演算法題 調整隊形

2022-05-09 06:24:07 字數 1196 閱讀 3664

題目是這樣的:

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

輸入描述:

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

輸出描述:

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

輸入例子:

ggbbg

輸出例子:

2讓男生挨著女生或者女生挨著男生的情況最少,就是左邊全部是g右邊全部是b或者左邊全部是b右邊全部是g,這樣只需要在g全部調整到左邊和g全部調整到右邊兩種情況下取最小調整次數即可,故只用知道最初的位置以及調整完成最終的位置。若將g全部調整到左邊,則先計算g的所有下標之和sumg,以及調整後最終g的下標0,1,2,...numg-1的和,即(numg-1)*numg/2,兩者之差就是最小調整次數。同理,將g全部調整到右邊相當於將b全部調整到左邊,對b進行上述計算即可。

程式如下:

process.stdin.resume();//回覆輸入流

process.stdin.setencoding('utf8');

var input_stdin = "";//輸入的全部資料

var input_stdin_array = "";//輸入的每行資料以陣列形式存在

var input_currentline = 0;//輸入的行數

process.stdin.on('data', function (data)

});process.stdin.on('end', function () );

function readline()

function main()else

}//0到numg-1的和為(numg-1)*numg/2

min=math.min(sumg-(numg-1)*numg/2,sumb-(numb-1)*numb/2);

console.log(min);

}

網易2017春招筆試 調整隊形

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

演算法調整隊形

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

網易面試題 調整隊形

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