Сделайте каждый индекс массива отрицательным в java
У меня есть этот код, чтобы найти наименьшее отсутствующее положительное значение в массиве. В методе findMissingPositive я не совсем понимаю, как индекс превращается в отрицательный, чтобы показать, что значение этого индекса было замечено раньше. Этот код взят из Найдите наименьшее положительное число, отсутствующее в несортированном массиве | Set 1 - GeeksforGeeks[^]
Это код для метода поиска наименьшего пропущенного положительного значения в несортированном массиве.
<pre> public static void main(String[] args) { int [] arr = {4, 9, 11, 8, 67}; System.out.println(findMissingPositive(arr, 5)); } static int findMissingPositive(int [] arr, int size){ int i; //Mark arr[i] as visited by making // arr[arr[i] - 1] negative. Note that // 1 is subtracted because index start from 0 // and positive numbers starts from 1. for(i = 0; i < size; i++){ int x = Math.abs(arr[i]); if(x - 1 < size && arr[x - 1] > 0) arr[x - 1] = -arr[x - 1]; } // Return the first index value which // is positive for(i = 0; i < size; i++){ if(arr[i] > 0){ return i + 1; // 1 is added because indexes start from 0 } } return size + 1; }
Что я уже пробовал:
Моя проблема заключается в тестировании первого цикла for для моего ввода
int [] arr = {4, 9, 11, 8, 67};
Первая итерация первого цикла for должна быть -
int x = Math.abs(arr[4])
.затем,
if(4 - 1 < 5 && arr[4- 1] > 0)
поскольку это верно, то первая итерация будет пройдена, и индекс 3 будет помечен отрицательно, но на второй итерации, int x = Math.abs(arr[9])
.Оператор if должен быть
if(9 - 1 < 5 && arr[9 - 1])
поскольку это не сработает, почему его индекс будет помечен как отрицательный? Вот тут-то мне его и не хватает, спасибо за любую помощь.
Maciej Los
Какую часть заявления вы не понимаете?
// Mark arr[i] as visited by making arr[arr[i] - 1] negative. // Note that 1 is subtracted because index start // from 0 and positive numbers start from 1
UT7
@Maciej, я все понимаю в комментариях. Моя проблема заключается в тестировании первого цикла for, чтобы увидеть, как работает каждая итерация. У меня возникли проблемы со второй итерацией. Спасибо.