Найдите позиции сбалансированного индекса в массиве

Для данного массива 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]

Примечание: Массив может иметь действительные числа.

Может кто-нибудь мне помочь..! Редактировать: Если в массиве нет элементов, этот код не работает.

Изменить 2:

  1. новый интервал [] {5, 0, -5, 4} Ожидаемый результат: [0,3]
  2. новый интервал [] {5, 0, -5, 4, 0, 6, 4} Ожидаемый результат: [0,3,6]

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

luk2302 27.03.2018 18:09

@RAZ_Muh_Taz Нет. Так работает временная сложность. Во всяком случае, это O (2n), которое есть O (n).

luk2302 27.03.2018 18:12

@RAZ_Muh_Taz, потому что это два цикла, каждый O (n), они не умножать, они Добавлять для сложности. Третий цикл от 0 до <arr.length снова будет O (n), а алгоритм останется O (n) в целом.

luk2302 27.03.2018 18:15

о боже, это 2n, а не n ^ 2, такой нуб. спасибо @ luk2302

RAZ_Muh_Taz 27.03.2018 18:16

@RAZ_Muh_Taz, как я понял, если один цикл For внутри другого цикла for, тогда сложность времени O (n ^ 2), поправьте меня, если я ошибаюсь.

Do It 27.03.2018 18:17

Вы правы, теперь снова на ходу: в чем вопрос?

luk2302 27.03.2018 18:17

Если массив содержит нулевые элементы, тогда theпроизведение элементов становится равным нулю, поэтому я не могу найти сбалансированные позиции индекса.

Do It 27.03.2018 18:19

Я использовал цикл for внутри другого, он работает, но временная сложность O (n ^ 2), вот код ссылка на сайт

Do It 27.03.2018 18:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
382
0

Другие вопросы по теме