1. 程式人生 > 其它 >【牛客網】美團2021校招筆試-淘汰分數

【牛客網】美團2021校招筆試-淘汰分數

題目連結:https://www.nowcoder.com/test/28665343/summary
題目描述:

某比賽已經進入了淘汰賽階段,已知共有n名選手參與了此階段比賽,他們的得分分別是a_1,a_2….a_n,小美作為比賽的裁判希望設定一個分數線m,使得所有分數大於m的選手晉級,其他人淘汰。
但是為了保護粉絲脆弱的心臟,小美希望晉級和淘汰的人數均在[x,y]之間。
顯然這個m有可能是不存在的,也有可能存在多個m,如果不存在,請你輸出-1,如果存在多個,請你輸出符合條件的最低的分數線。
資料範圍:1 <= n <= 50000,1<=x <= y <= n

輸入描述:
輸入第一行僅包含三個正整數n,x,y,分別表示參賽的人數和晉級淘汰人數區間。(1<=n<=50000,1<=x,y<=n)輸入第二行包含n個整數,中間用空格隔開,表示從1號選手到n號選手的成績。(1<=|a_i|<=1000)

輸出描述:
輸出僅包含一個整數,如果不存在這樣的m,則輸出-1,否則輸出符合條件的最小的值。

輸入
6 2 3
1 2 3 4 5 6

輸出
3

題解:

1.在[x,y]中若選最小人數,2 * x > n, 則不存在;選最大人數,若 2* y < n,則不存在。
2.對陣列進行排序。
3.在[x,y]中選2個數i,j,使i + j = n,同時i最小。

let firstline = readline();
let n = firstline.split(' ')[0];
let x = firstline.split(' ')[1];
let y = firstline.split(' ')[2];
let scores = readline().split(' ');
solve(n, x, y, scores);

function solve(n, x, y, scores){
    scores.sort((a, b) => {return a - b});
    if(2 * x > n || 2 * y < n)
        {
            print("-1");
        }
    let i = 0;
    for(i = x; i <= y; i++)
        {
            let j = n - i;
            if(j >= x && j <= y)
                  break;
        }
    print(scores[i - 1]);
    
}