Для данного массива arr и его размера является N, найдите сбалансированную позицию (позиции) индекса п так, чтобы сумма элементов массива От 0 до С-1 была равна произведению P + 1 в N-1.
В худшем случае временная сложность На): Я пробовал использовать приведенный ниже код, он работает, если массив не содержит нуля.
/**
*
*/
package com.array.balance.indexes;
import java.util.HashSet;
import java.util.Set;
/**
* @author Prasad
*
*/
public class FindBalancedIndexesInArray {
public static void main(final String[] args) {
System.out.println(getIndexes(new int[] { 1, 2, 1, 3 }));
System.out.println(getIndexes(new int[] { 1, 2, 1 }));
}
private static Set<Integer> getIndexes(final int[] arr) {
final Set<Integer> indexes = new HashSet<>();
int leftElementsSum = 0;
if (arr == null || arr.length == 0) {
// return Empty set
return indexes;
}
if (arr.length == 1) {
// If it is Only One Element, previous and next are equal..
indexes.add(0);
return indexes;
}
/**
* If the Array doesn't have zero, elements, then Time Complexity is O(n).
*/
int product = arr[0];
/**
* Calculate Product of the array elements
*/
for (int i = 1; i < arr.length; i++) {
product *= arr[i];
}
/**
* Time Complexity O(n)
*/
for (int i = 1; i < arr.length; i++) {
// Calculate Previous Elements sum
leftElementsSum += arr[i - 1];
// calculate Product
product = product / arr[i];
// Check Previous Sum and Next Multiplication is Equal..
if (leftElementsSum == product) {
indexes.add(i);
}
}
/**
* For the last element in the array, if the SUM of 0 to N-2 Elements are ZERO,
* then include last Element Index.
*/
if (leftElementsSum == 0) {
indexes.add(arr.length - 1);
}
return indexes;
}
}
Выход: [2] [1]
Примечание: Массив может иметь действительные числа.
Может кто-нибудь мне помочь..! Редактировать: Если в массиве нет элементов, этот код не работает.
@RAZ_Muh_Taz Нет. Так работает временная сложность. Во всяком случае, это O (2n), которое есть O (n).
@RAZ_Muh_Taz, потому что это два цикла, каждый O (n), они не умножать, они Добавлять для сложности. Третий цикл от 0 до <arr.length снова будет O (n), а алгоритм останется O (n) в целом.
о боже, это 2n, а не n ^ 2, такой нуб. спасибо @ luk2302
@RAZ_Muh_Taz, как я понял, если один цикл For внутри другого цикла for, тогда сложность времени O (n ^ 2), поправьте меня, если я ошибаюсь.
Вы правы, теперь снова на ходу: в чем вопрос?
Если массив содержит нулевые элементы, тогда theпроизведение элементов становится равным нулю, поэтому я не могу найти сбалансированные позиции индекса.
Я использовал цикл for внутри другого, он работает, но временная сложность O (n ^ 2), вот код ссылка на сайт




Вы забыли задать вопрос.