码迷,mamicode.com
首页 > 编程语言 > 详细

第二周练习——数组

时间:2019-03-10 21:09:06      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:自己   时间   oid   加油   arp   一个   int   次数   第二周   

一、题目

输入一个整型数组,数组里有正数也有负数。数组中一个或者连续的多个整数组成一个字数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。

二、需求分析

1.输入整数数组
2.输出最大子数组的和
3.如何寻找最大子数组

 三、题目分析

 因为时间复杂度为O(n),则只能遍历一次数组。

这是一段“傻子”代码,我用这一段代码来思考这道题,或许有点迷惑,有的时候我也搞不懂,纯粹靠自己的想法制造。

int a[n],sum,max;
sum=max[a,b]
*a=a[1]+a[2]

for(int i=0;i<n;i++)
if(a[i]>=0)
sum=sum+a[i];
else
sum=sum;
 

 

四、程序源码

//这段代码不能说是出自我手,毕竟是参考了一个网上的教程后才能写出来的,最开始我是万万写不出来的,还需要加油。
package zhengxingshuzu;

public class Zxsz {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
      int array[] = {1,-6,3,-5,7,1,-9,5};
      System.out.println(findMax(array));
    }
    public static int findMax(int array[]){
        //加上约束条件,防止当数组为空时造成数组越界
        if (array.length == 0) {
            return 0;
        }
        int max = array[0];
        int sum = 0;
        for(int i=0; i<array.length; i++){
            //如果加上某个元素sum>=0的话,就加;
            if(sum >= 0) {
                sum += array[i];
            }
            //当数组全为负数的时候只要有加法就一定比原来的数小,此时就相当于找出数组内最大的数
            else{
                sum = array[i]; //否则从当前位置重新计算
            }
            if(sum > max){
                max = sum;
            }
        }
        return max;
    }
}

这个代码无法从控制板输入数组,只能从后台输入数组。

五、运行截图

例如数组{1,-6,3,-5,7,1,-9,5}

技术图片

结果如下:

技术图片

第二周练习——数组

标签:自己   时间   oid   加油   arp   一个   int   次数   第二周   

原文地址:https://www.cnblogs.com/kmxbf2292/p/10506651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!