Loading...
KristinaDimi avatar KristinaDimi 1 Точки

Помощ с задача 5.Bomb Numbers Exercise: Lists JavaFundamentals

Здравейте,

имам нужда от помощ с задача 5.Bomb Numbers Exercise List JavaFundamentals, в Judge не ми излиза един тест.

 

Това е моето решение
https://pastebin.com/kUMVhRVw

 

Условие на задачата

Write a program that reads sequence of numbers and special bomb number with a certain power. Your task is to detonate every occurrence of the special bomb number and according to its power his neighbors from left and right. Detonations are performed from left to right and all detonated numbers disappear. Finally print the sum of the remaining elements in the sequence.

Examples

Input

Output

Comments

1 2 2 4 2 2 2 9

4 2

12

Special number is 4 with power 2. After detonation we left with the sequence [1, 2, 9] with sum 12.

1 4 4 2 8 9 1

9 3

5

Special number is 9 with power 3. After detonation we left with the sequence [1, 4] with sum 5. Since the 9 has only 1 neighbor from the right we remove just it (one number instead of 3).

1 7 7 1 2 3

7 1

6

Detonations are performed from left to right. We could not detonate the second occurrence of 7 because its already destroyed by the first occurrence. The numbers [1, 2, 3] survive. Their sum is 6.

1 1 2 1 1 1 2 1 1 1

2 1

4

The red and yellow numbers disappear in two sequential detonations. The result is the sequence [1, 1, 1, 1]. Sum = 4.

0
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки

Проблемът е в методите за премахване на елементите - модифицирате листа (с remove()), докато го обхождате по индекс (след като премахнете елемент останалите елементи се разместват, което може да направи прави индекса невалиден). Наичнаещите програмисти често допускат тази грешка, но повече не я правете, защото невинаги ще има Judge, който да сигнализира за проблема.
Вместо да пишете собствена логика за това, най-добре използвайте методите, които идват наготово с езика - те са добре документирани и тествани.В случая е най-удачно да се използва removeRange(start, end) като единствено трябва да се подсигурим, че началото и края, които му подаваме, са в границите на листа.
Примерен код:

int leftIndex = Math::max(0, index - power);
int rightIndex = Math::min(nums.size(), index + power + 1);

nums.removeRange(leftIndex, rightIndex);

 

1
19/06/2022 20:15:19
KristinaDimi avatar KristinaDimi 1 Точки

Благодаря много.

В Java не открих метод removeRange, но използвах   nums.subList( leftIndex, rightIndex + 1).clear();

Това е цялото решение, в случай, че на някого свърши работа.

https://pastebin.com/CrBacDH7

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.