First Largest Than Neighbors - JS

Здравейте, имам проблем със задачата - First Largest Than Neighbors.
Условието е : Write a method that returns the index of the first element in array that is larger than its neighbors, or -1 , if there is no such element.
Във VSCode решението ми минава, но в judge ми изкарва wrong answer.
https://pastebin.com/Y93rsMq0

Пробвай да ползваш следните 2 метода:


Колкото до твоя код, като пушваш входните данни в арей, пушвай ги като числа, може това да обърква нещата :slight_smile:

1 Like

Пробвах други решения, но ми изкарва на всяко - 2. Не намирам грешка в решението. Идея си нямам къде греша. Това е другото решение - https://pastebin.com/FpjbePLx

Здравей, Йордан,
Първото решение коректно определя индекса на първото число, което е по-голямо от своите две съседни в редицата. За тестовия пример това е 1 - индексът на -25 (при условие че сме приели първият елемент на редицата да има индекс 0).

Това решение предполага, че входните данни ще са във вид на масив от числа, напр.

[ 6, -26, -25, -28, 31, 2, 27 ]

първото от които ще задава броя на членовете на редицата, а следващите ще образуват самата редица.

По-вероятно е обаче входните данни, които се подават от Judge, да са във вида, даден във второто решение - масив от два стринга (символни низа), напр.

[ '6', '-26 -25 -28 31 2 27' ]

всеки от които представлява един “ред” от входа. За да се преобразува втория “ред” от такъв вход до масив от числа може да се използва например следната модификация на редове 23-27 от първото решение:

let numbersAsStrings = gets().split(' ');
let arr = new Array();
for (let i = 0; i < numbersAsStrings.length; i++) {
    arr.push(+numbersAsStrings[i]);
}

При примерните входни данни на променливата numbersAsStrings ще се присвои масива

[ '-26', '-25', '-28', '31', '2', '27' ]

състоящ се от стринговете, получени от разделянето на резултата, върнат от gets(), на “думи”, за разделител между които се счита знакът за интервал ' '. След това, в тялото на цикъла всяка от тези думи се преобразува до число с помощта на оператора +, за да се получи масива

[ -26, -25, -28, 31, 2, 27 ]

Оттам нататък може да се използва кодът от първото решение. (Ако вместо това променливата arr се инициализира направо с резултата, върнат от gets(), то стойността на arr ще бъде стринг от 19 символа и цикълът на редове 30-35 от второто решение ще обхожда тези символи един по един, вместо да прочете съответните числа, съдържащи се в стринга.)

Вече не си спомням добре, но мисля, че в решенията, които се изпращаха за оценяване от Judge, трябваше да се използва навсякъде функцията print, чиято дефиниция се предоставя от средата, в която се изпълнява решението, и само резултатът от нея се прихваща от оценяващия код (за разлика от console.log).

Поздрави,
Иван

2 Likes

Благодаря ви за помощта и изчерпателния отговор. :slight_smile: