我正在嘗試解決hackerrank問題 - 最大子數組模數 - 這裏描述的是https://www.hackerrank.com/challenges/maximum-subarray-sum/problem。 我很好奇這個問題是否可以用Kadane算法解決。使用Kadane算法的最大子陣列模數
目標:給定一個n元素的整數數組和一個整數'm',確定其任何子模數'm'的總和的最大值。
輸入格式:
1)第一行包含一個整數「Q」表示查詢執行的數目。每條查詢用兩行描述:
a)第一行包含兩個空格分隔的整數 ,描述了數組長度和模數。
b)第二行包含空格分隔的整數,描述數組的元素 。
這是我想出的可能的C++代碼。它在一些測試用例中失敗(對不起,測試用例太大而無法在這裏發佈)。您可以評論/評論爲什麼這可能無效嗎?謝謝。
#include <bits/stdc++.h>
int main()
{
uint64_t q = 0, n = 0, m = 0;
std::cin >> q;
std::cin >> n;
std::cin >> m;
while(q) {
std::vector<uint64_t> vec;
for (uint64_t i = 0; i < n; i++) {
uint64_t num;
std::cin >> num;
vec.push_back(num);
}
uint64_t subArrayMax = 0;
uint64_t maxMod = 0;
for (uint64_t i = 0; i < n; i++) {
// Kadane's algorithm.
subArrayMax = std::max(subArrayMax, subArrayMax+vec[i]); // try (a+b)%m=(a%m+b%m)%m trick?
maxMod = std::max(maxMod, subArrayMax % m);
}
std::cout << maxMod;
--q;
}
}
子陣列需要是連續的? –
嘗試找到一個算法失敗的小例子。比這個例子回來。 – MrSmith42