華為機試練習題 37 合唱隊

2021-09-02 11:55:00 字數 2112 閱讀 3417

題目

描述:

計算最少出列多少位同學,使得剩下的同學排成合唱隊形

說明:n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學排成合唱隊形。

合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1,2…,k,他們的身高分別為t1,t2,…,tk, 則他們的身高滿足存在i(1<=i<=k)使得t1 < t2 <...... < ti-1 < ti >ti+1 >......>tk。

你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。

題目類別:

迴圈
難度:

初級
執行時間限制:

無限制
記憶體限制:

無限制
階段:

入職前練習
輸入:

整數n

一行整數,空格隔開,n位同學身高

輸出:

最少需要幾位同學出列
樣例輸入:

8

186 186 150 200 160 130 197 200

樣例輸出:

4
**

/*---------------------------------------

* 日期:2015-07-02

* 題目:合唱隊

-----------------------------------------*/

#include

#include

#include

#include

#include

using

namespace

std;

int chorus(vector

height)//if

// left to right left[i] 統計出左邊小於height[i]的身高個數(left[i] 包括height[i]本身)

vector

left(n,1);

for(int i = 1;i < n;++i)//if

}//if

}//for

}//for

// right to left right[i] 統計出右邊小於height[i]的身高個數(right[i] 包括height[i]本身)

vector

right(n,1);

for(int i = n-2;i >= 0;--i)//if

}//if

}//for

}//for

int max = 0;

for(int i = 0;i < n;++i)//if

}//for

return n - max;

}int main()//for

cout

return

0;}

#include 

#include

using

namespace

std;

int solve(int n);

int main()

return0;}

int solve(int n)

vector

left(n,1), right(n,1);

for(int i=0;i//統計i左邊小於height[i]的人數

for(int j=0;jif(height[i]>height[j])

if(left[i]1)

left[i] = left[j]+1;

}//統計i右邊小於height[i]的人數

for(int k = n-i;k < n;++k)

}/*for(int i = 0;i < n;++i)

華為機試練習題 37 合唱隊

題目 描寫敘述 計算最少出列多少位同學。使得剩下的同學排成合唱隊形 說明 n位同學站成一排,老師要請當中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這種一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足存在i 1 i k 使得...

華為練習題 合唱隊

計算最少出列多少位同學,使得剩下的同學排成合唱隊形 說明 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足存在i 1 i k 使得t1 tk。你...

2015華為機試練習之合唱隊

描述 計算最少出列多少位同學,使得剩下的同學排成合唱隊形 說明 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足存在i 1 i k 使得titi...