腾讯经典考题《编写代码求最大连续子序列》

本文介绍了最大连续子序列问题,即求解数组中最大连续子序列的和。通过解析解题思路,分别探讨了暴力搜索方法的时间复杂度为O(N^2),然后详细解释了动态规划的解决方案,定义状态F(i)并给出状态转移方程F(i) = max{ F(i-1) + array[i], array[i] },以找到全局最大连续子序列和。" 114322155,10537816,Ubuntu安装JDK依赖性失败解决方案,"['Linux', 'Java', 'Ubuntu安装', '依赖问题']
摘要由CSDN通过智能技术生成

1.什么是最大连续子序列?

最大连续子序列问题是一个非常经典的问题,需要求解出一个数组中的最大连续子序列的和。比如数组{6, -3, -2, 7, -15, 1, 2, 2},它的最大连续子序列为{6,-3,-2,7},和为8。

2.解题思路

(1)暴力搜索

最大连续子序列的和只可能从数组0到n-1中某个位置开始,我们可以遍历0到n-1个位置,计算由这个位置开始的所有连续子序列中的和的最大值,最终求出全局最大值即可。更详细的讲,就是计算从位置0开始的最大连续子序列的和,从位置1开始的最大连续子序列的和…。直到从位置n-1开始的最大连续子序列的和,最后求出所有这些连续子序列和中的最大值,这个值就是答案。

int GreatestSum(int[] array){
        int maxsum = array[0];        //初始化最大值起初为第一个元素
        for (int i = 0; i < array.length; i++) {
            //求以第i个元素开始的所有子序列和
            int sum = 0;
            for (int j = i; j < array.length; j++) {
                //从位置 i开始计算从 i开始的最大连续子序列和的大小,如果大于 max,则更新 max。
                sum += array[j];
                if (sum > maxsum)
                    maxsum = sum;
            }
        }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值