You are given two arrays where the elements of the first one are subset of the elements of the second one. For each element in the first array, find the next greater element in the second array, starting at the position of the given element.
Input
Read from the standard input.
On the first line will be the first array of numbers, separated by comma.
On the second line will be the second array of numbers, separated by comma.
Output
Print the result on the standard output.
The result should be the numbers, separated by comma.
Constraints
All elements will be unique (the elements from the first array are unique in the first array, the elements from the second array are unique in the second array).
The length of both arrays would not exceed 1000.
Здравейте, ударих на камък със задача номер 2 от mock exam 4, като получавам само 50/100 и не мога да разбера къде би могла да бъде грешката.
Първо виждам, че не взимате входните данни както трябва.
Вие ги получавато като стрингове от числа, които след това трябва да конвертирате в масив от числа.
Така ще си спестите и проверката за isNaN, след като вече всички числа в масива са обрънати от стринг на число. Най-вероятно все още не знаете за map функцията, но просто знайте, че след split като напишете .map(Number) всичко в масива ще е числа
Ето ви примерни стъпки как можете да решите задачата:
Взимате си 2-та масива от входните данни, както ви показах по-горе.
След това итерирате по първият масив, както и правите
Вместо да имате вложен цикъл можете да използвате следните методи, които би трябвало да знаете на този етап
indexOf - така можете да си намерите за текущото число на кой индекс се намира във вторият масив
slice - след като имате индекса от вторият масив можете да “изрежете” със този метод само от
намерения индекс натам или както е по условие (в дясно от текущото число). Така ще имате масив само с числата от дясно на текущото число от първият масив. Тъй като index-а, който ще получите ще е точно за числото тук трябва да се сетите нещо (това число не ви трябва в изрязания масив)
След като имате числата от дясно просто итерирате по тях, ако има по-голямо число измежду тях го бутате в резултата, ако няма бутате -1, както е по условие.
Принтирате резултата с join метода
По условие пише, че масивите ще са само от числа, така че отново проверката isNaN е безсмислена
const arr1 = gets().split(',').map(Number);
const arr2 = gets().split(',').map(Number);
const result = [];
for (let i = 0; i < arr1.length; i++) {
const indexOfCurrentNumber = arr2.indexOf(arr1[i]);
const currentNumbersOnRight = arr2.slice(indexOfCurrentNumber + 1)
.filter((number) => number > arr1[i]);
if (currentNumbersOnRight.length > 0) {
result.push(currentNumbersOnRight[0]);
} else {
result.push(-1);
}
}
print(result.join());
Toва го написах преди да ви дам насоки, че отдавна не бях решавал тук задачи
В решението изрязвам числата след текущото число от дясно и филтрирам само тези, които са по-големи. Ако филтрирания масив е празен значи няма по-голямо, ако има просто бутам в резултата първото от масива
Наистина има супер много начини за решение, но от по-сложните нищо не разбирам все още , имам още доста “хляб” да ям, че да Ви настигна и да започна да ги решавам по този начин. Отново благодаря и Ви пожелавам лека вечер.
Здравейте! Опитах се да реша задачата с pyhton, но джъдж ми даде следния резултат: Test case #1: Accepted [0.05 s, 9.85 MB] Test case #2: Accepted [0.05 s, 9.85 MB] Test case #3: Wrong Answer [0.05 s, 9.85 MB] Test case #4: Accepted [0.05 s, 9.85 MB] Test case #5: Wrong Answer [0.05 s, 9.85 MB] Test case #6: Accepted [0.05 s, 9.85 MB] Test case #7: Accepted [0.05 s, 9.85 MB] Test case #8: Accepted [0.05 s, 9.85 MB] Test case #9: Accepted [0.05 s, 9.85 MB] Test case #10: Wrong Answer [0.05 s, 9.85 MB] Test case #11: Wrong Answer [0.05 s, 9.85 MB] Test case #12: Accepted [0.05 s, 9.85 MB] Test case #13: Wrong Answer [0.05 s, 9.85 MB] Test case #14: Wrong Answer [0.05 s, 9.85 MB]
Това е кодът:
Моля Ви да ми помогнете да си открия грешката!
П.С. В предишна дискусия за тази задача е отбелязано, че някои тестове не са били с уникални числа във втория масив и в резултат на това, тестовете са били коригирани:
В задачата се иска за всяко число в първия масив да намерим следващото по-голямо от него във втория масив. Т.е. не само да проверим дали числото директно след него е по-голямо, а дали някое от всички останали след него във втория масив не е по-голямо и съответно да принтираме първото такова. Ако променим малко втория пример от задачата:
2,4
2,1,3,4
С тези входни данни ще получим резултат -1,-1, въпреки че има по-голямо число след 2, но така сравняваме само 2 и 1 и получаваме -1 вместо 3.
Измисли как да сравняваш с всички числа след това във втория масив докато не стигнеш до по-голямо или не свърши масива.