zoukankan      html  css  js  c++  java
  • 第二周练习——数组

    一、题目

    输入一个整型数组,数组里有正数也有负数。数组中一个或者连续的多个整数组成一个字数组。求所有子数组的和的最大值。要求时间复杂度为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}

    结果如下:

  • 相关阅读:
    java Vamei快速教程02 方法和数据成员
    java Vamei快速教程01
    二叉树
    高效通信模型之
    高效通信模型之
    线程间通信与同步
    线程
    进程
    C++面试知识点总结
    windows下UDP服务器和客户端的实现
  • 原文地址:https://www.cnblogs.com/kmxbf2292/p/10506651.html
Copyright © 2011-2022 走看看