我在读科门的“算法导论”。
对于最大和子阵问题的线性算法,我提出了自己的解决方案。在实现之前没有检查现有的(Kadena's)。
现在我用不同的测试方案来测试它,并且总是比卡迪纳的测试结果更好。我不相信这样的运气,但是我找不到我错过的东西。你能看看这是不是一个可行的解决方案吗?
public void findMaxSubarray(Number[] numbers) {
int maxSum = Integer.MIN_VALUE;
int left = 0;
int right = numbers.length - 1;
int i = 0;
目的:评价在连续子阵中求最大和的算法。
注:用C++写成
当我研究Kadane使用动态规划成功解决的问题时,我想我会找到自己的解决方法。我这样做的方法是使用一系列递归调用,这取决于是否可以通过卖空数组的末端来增大和。见下文。
int corbins_largest_sum_continuous_subarray(int n, int* array){
int sum = 0; // calculate the sum of the current array given
for(int i=0; i<n; i++){sum += array[i];}
if(sum-a
下面是我的程序,用于从给定的数组中找到子数组(连续的)的最大和。用kadane的算法很容易。
#include <iostream>
#include <cstdio>
using namespace std;
int kadane(int a[], int n) {
int max_ending_here = a[0], max_till_now = a[0];
int _start = 0, _end;
bool s=true;
for (int i = 1; i < n; ++i)
{
ma
输入测试用例:
-2,1,-3,4,-1,2,1,-5,4
-2,-1
-2,1
1
1,2
function maxSubarray(array) {
var currentMax = array[0];
var max = array[0];
for (var i = 0; i < array.length; i++) {
// Compare 0 and currentMax + array[i]
我想用Kadane算法解决q;中的最大子阵问题。
def max_subarray(numbers):
"""Find the largest sum of any contiguous subarray."""
best_sum = 0
current_sum = 0
for x in numbers:
current_sum = max(0, current_sum + x)
best_sum = max(best_sum, current_sum)
return bes
给定一个实数数组,A[1..n,1..n],我希望找到子数组。
B = A[i..j,s..t]
使用1 <= i <= j <= n,和1 <= s <= t <= n
使得B中的数字之和最大化。可以用动态规划来解决这个问题吗?我和奥胡斯大学的一位OR教授谈过,他不知道该怎么做,他说他很难知道如何才能达到最佳的亚结构质量。
但这有可能吗?如果是,怎么做?如果没有,为什么?
我已经知道了一种在O(n^3)时间运行的算法,将其简化为复杂性O(n)的n(n+1)/2子问题,但这似乎有点慢。我知道最优算法将在Omega(n)时间运行,但我希望动态规划可以用于使其在
我已经编写了Kadane的算法,但不知何故它返回了错误的结果。不知道为什么。下面是实现。它基本上是在一个数组中找到具有最大和的‘`ubarray public class Kadane {
public static void main(String[] args) {
int[] arr = {-2, -5, 6, -2, -3, 1, 5, -6};
Kadane k = new Kadane();
System.out.println(k.calculate(arr, 0, 0));
}
public int
我想要求为给定数组快速找到连续子数组的方法。请注意,我不是在寻找最大和连续子数组,而是要执行其他操作的子数组获得。我已经知道了下面的算法,但是我正在寻找更有效的算法,因为这个算法的时间复杂度非常低。
// N = number of elements in array A.
void subarr(int N, int A[]) {
for (int i = 0; i < N; i++) {
for (int j = i; j < N; j++) {
for (int k = j; k < N; k++) {
cout <<
这是interviewbit.com的一个最大和连续问题。
问题:在具有最大和的数组(至少包含一个数字)中查找连续子数组。例如:给定数组-2,1,-3,4,-1,2,1,-5,4,连续子数组4,-1,2,1具有最大和= 6。
这是我的解决办法:
def max_sub_array(array):
""" Finds msub-array with maximum sum and returns the maximum sum and sub-array"""
max_start, max_stop = 0, 1 # Start,
问题是-给出了一个大小为N的数组和另一个整数M。您的目标是找到子阵列模M之和的最大值。
If array is {3 3 9 9 5} and M is {7}
可能的子数组是
{3},{3},{9}.{9}.{5}
{3,3},{3,9},{9,9},{9,5}
{3,3,9},{3,9,9},{9,9,5}
{3,3,9,9},{3,9,9,5},{3,3,9,9,5}
其中,取模7的最大可能和为6。子数组{3,3}有最大和。
我偶然发现了解决方案,但无法理解逻辑。
static void solve(long M, long[] array){
TreeSet<Long&g
我一直在做。我编写了这段代码,它适用于“调试”页面中的每个测试用例,并形成其他论坛。但当我向在线法官提交时,它变成了错误的答案。这是我的密码
#include <stdio.h>
int main() {
int stop[30000];
int n, m, i, j, ans, sum, imax, imin, tmin, a = 1;
scanf("%d", &n);
while (n--) {
// get all values
scanf("%d", &m);