343. Integer Break
given entier n. return true, если оно является степенью числа четыре. В противном случае return false.
entier n является степенью числа четыре, если существует entier x такое, что n == 4^x.
Exemple
Input: n = 2
Output: 1
Explanation: 2 = 1 + 1, 1 × 1 = 1.
C# solution
correspondant/originalpublic class Solution {
public int IntegerBreak(int n) {
if (n <= 1) return 0;
int[] dp = new int[n + 1];
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i / 2; j++) {
dp[i] = Math.Max(dp[i], Math.Max(j * (i - j), j * dp[i - j]));
}
}
return dp[n];
}
}
C++ solution
brouillon automatique, à relire avant soumission#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int IntegerBreak(int n) {
if (n <= 1) return 0;
vector<int>& dp = new int[n + 1];
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i / 2; j++) {
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]));
}
}
return dp[n];
}
}
Java solution
brouillon automatique, à relire avant soumissionimport java.util.*;
import java.math.*;
// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
public int IntegerBreak(int n) {
if (n <= 1) return 0;
int[] dp = new int[n + 1];
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i / 2; j++) {
dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));
}
}
return dp[n];
}
}
JavaScript solution
correspondant/originalvar integerBreak = function(n) {
if (n <= 1) return 0;
let dp = new Array(n + 1).fill(0);
for (let i = 2; i <= n; i++) {
for (let j = 1; j <= Math.floor(i / 2); j++) {
dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));
}
}
return dp[n];
};
Algorithm
Инициализация и базовый случай:
Создайте tableau dp длиной n + 1, где dp[i] будет хранить максимальное произведение для числа i. Инициализируйте tableau нулями.
Вычисление максимального произведения:
Для каждого числа i от 2 до n:
Для каждого числа j от 1 до i // 2:
Обновите dp[i] как максимальное значение между текущим dp[i], произведением j и i - j, и произведением j и dp[i - j].
Возврат результата:
return значение dp[n], которое будет максимальным произведением для числа n.
😎
Vacancies for this task
offres actives with overlapping task tags are affichés.