Здравейте, имам проблем със задачата - 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 метода:
Колкото до твоя код, като пушваш входните данни в арей, пушвай ги като числа, може това да обърква нещата
Пробвах други решения, но ми изкарва на всяко - 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
).
Поздрави,
Иван
Благодаря ви за помощта и изчерпателния отговор.