【算法导论】最大子数组——暴力求解

简介: 1. 暴力方法求解最大子数组问题:求出所有子数组的和并比较; 2. 伪代码 FIND-MAXIMUM-SUBARRAY(A) max = -∞ for i = 1 to A.

1. 暴力方法求解最大子数组问题:求出所有子数组的和并比较;

2. 伪代码

FIND-MAXIMUM-SUBARRAY(A)
    max = -for i = 1 to A.length
        sum = 0
        for j = i to A.length
            sum += A[j]
            if sum > max
                max = sum
                low = i
                high = j
    return (low, high, max)

3. 代码实现

java

public class MaxArray {

    private static class Result {
        int low;
        int high;
        int sum;

        public Result(int low, int high, int sum) {
            this.low = low;
            this.high = high;
            this.sum = sum;
        }
    }

    static Result findMaximumSubarray(int[] A){
        int max = Integer.MIN_VALUE;
        int low = 0;
        int high = 0;
        for (int i = 0; i < A.length; i++) {
            int sum = 0;
            for (int j = i; j < A.length; j++) {
                sum += A[j];
                if (sum > max) {
                    max = sum;
                    low = i;
                    high = j;
                }
            }
        }
        return new Result(low, high, max);
    }
}

python

之前用切片其实也是暴力求解

def find_maximum_subarray1(nums):
    max_sum = -float('inf')
    result = {}
    for i in range(len(nums)):
        total = 0
        for j in range(i, len(nums)):
            print(j)
            total += nums[j]
            if total > max_sum:
                max_sum = total
                result["low"] = i
                result["high"] = j
    result["sum"] = max_sum
    return result

C语言

typedef struct {
    int low;
    int high;
    int sum;
} result;

result find_maximum_subarray(int arr[], int len)
{
    int max = -((unsigned)(~0) >> 1);
    int low, high, i, j;
    for (i = 0; i < len; i++)
    {
        int sum = 0;
        for(j = i; j < len; j++)
        {
            sum += arr[j];
            if (sum > max)
            {
                max = sum;
                low = i;
                high = j;
            }
        }
    }
    result re;
    re.low = low;
    re.high = high;
    re.sum = max;
    return re;
}

 

相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
37 0
|
3月前
|
算法 测试技术
【算法】二分算法——寻找旋转排序数组中的最小值
【算法】二分算法——寻找旋转排序数组中的最小值
|
3月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
25天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
25 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
25天前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
20 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
5月前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
59 0
|
3月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
3月前
|
算法
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
【Azure Developer】完成算法第4版书中,第一节基础编码中的数组函数 histogrm()
|
3月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
3月前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积