Open guodongxiaren opened 4 years ago
class Solution {
public:
int maxSumDivThree(vector<int>& nums) {
int dp[3] = {0};
int tmp[3] = {0};
for (int n: nums) {
memcpy(tmp, dp, sizeof(int)*3);
for (int i = 0; i < 3; ++i) {
if ((n + dp[i]) % 3 == 0) {
tmp[0] = max(n+dp[i], tmp[0]);
} else if ((n + dp[i]) % 3 == 1) {
tmp[1] = max(n+dp[i], tmp[1]);
} else {
tmp[2] = max(n+dp[i], tmp[2]);
}
}
memcpy(dp, tmp, sizeof(int)*3);
}
return dp[0];
}
};
改进:减少一次memcpy!
class Solution {
public:
int maxSumDivThree(vector<int>& nums) {
int dp[3] = {0};
int tmp[3] = {0};
for (int n: nums) {
memcpy(tmp, dp, sizeof(int)*3);
for (int i = 0; i < 3; ++i) {
if ((n + tmp[i]) % 3 == 0) {
dp[0] = max(n+tmp[i], dp[0]);
} else if ((n + tmp[i]) % 3 == 1) {
dp[1] = max(n+tmp[i], dp[1]);
} else {
dp[2] = max(n+tmp[i], dp[2]);
}
}
}
return dp[0];
}
};
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。
示例 1:
示例 2:
示例 3:
提示: