Я пытаюсь получить максимальный результат в 2d векторе

#c

#c

Вопрос:

Я пытаюсь получить максимальный вывод в 2d-массиве, например Input: accounts = [[1,2,3],[3,2,1]] Результат: 6 Объяснение: 1-й клиент обладает богатством = 1 2 3 = 6 2-й клиент имеет богатство = 3 2 1 = 6 Оба клиента считаются самыми богатыми с богатством по 6 у каждого, так что возвращайте 6.

текущий ввод = [[1,2,3],[3,2,1]];

текущий вывод = 12;

ожидаемый результат = 6;

Я не могу понять, почему он дает 12.

 class Solution {
public:
    int maximumWealth(vector<vector<int>>amp; accounts) 
    {
        int max , temp = 0;
        for(int i=0;i<accounts.size();i  )
        {
            for(int j=0;j<accounts[i].size();j  )
            {
                temp = temp   accounts[i][j];
            }
            if(temp > max)
            {
                max = temp;
            }
        }
        return max;
    }
    };
 

Обновить:

Теперь ввод : [[1,2,3],[3,2,1]]

текущий вывод: 1849672928

ожидаемый результат: 6

Комментарии:

1. Выполните пошаговое выполнение кода с помощью отладчика или вручную, используя блокнот для переменных. Обратите особое внимание на temp . Пока вы этим занимаетесь, вы можете решить дать temp более описательное имя. Каким он на самом деле должен быть? Сумма значений в одном подвекторе, верно? Это то, что это такое?

Ответ №1:

Вам необходимо повторно инициализировать счетчик суммы массива перед внутренним циклом:

 for(int i=0;i<accounts.size();i  )
{
    temp = 0; // re-initialise before taking every array/account's sum here
    for(int j=0;j<accounts[i].size();j  )
    {
        temp = temp   accounts[i][j];
    }
    if(temp > max)
    {
        max = temp;
    }
}
 

Кроме того, вы должны инициализировать свою max переменную как очень маленькое значение, например INT_MIN , или просто 0 (если у вас нет отрицательных элементов).

 #include <climits>
int max = INT_MIN, temp = 0;
 

Мы устанавливаем его на минимум, чтобы для первого сравнения гарантированно, что max для одного элемента внутри вашей матрицы будет установлено значение. Позже это просто сравнение с другими матричными элементами.

Комментарии:

1. Спасибо, это принято, но все же я не понял концепцию.

2. Вам нужно установить счетчик на 0, прежде чем вы начнете брать сумму каждого одномерного массива. Вам нужно сбросить счетчик для каждой новой учетной записи. В противном случае вы также добавили бы сумму из предыдущих учетных записей / 1-d массивов.

3. Если проблема решена, пожалуйста, отметьте ответ как принятый, чтобы закрыть его. @BATMAN_X

4. На самом деле теперь есть еще одна проблема, и я обновил вопрос, можете ли вы взглянуть на него.

5. Вы инициализировали свою max переменную как 0? @BATMAN_X

Ответ №2:

 var maximumWealth = function (accounts) {
    let a = accounts.map((e) => e.reduce((a, b) => a   b))
    return Math.max(...a)
};