#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)
};