zoukankan      html  css  js  c++  java
  • 课堂练习&课下作业

    设计思路:

    一个数组首尾相接来找和最大的子数组,我认为就是寻找一个能产生和最大子数组的一种数组的最大排列,即去掉最小的负数。若数组中都是正数,所有数相加就能和最大,若数组中有负数,则去掉最小的负数,在剩下的子数组中找一个和最大的子数组。去掉最小负数的方法就是遍历数组,找到最小值,把其放在数组的首位或者是末位就可以了。

    源代码:

    import java.util.*;
    
    public class ArrayMax {
        public static void main(String args[])
        {
            Scanner input = new Scanner(System.in);
            System.out.print("请输入数组的长度:");
            int n = input.nextInt();
            
            int data[] = new int[n];
            int array[] = new int[n];
            System.out.print("请输入数组:");
            for(int i=0;i<n;i++)
            {
                data[i] = input.nextInt();
            }
            
            int sum = 0;
            int min = data[0];
            int number = 0;
            
            for(int i=0;i<n;i++)
            {
                if(min>data[i])
                {
                    min = data[i];
                    number = i;
                }
            }
    
            for(int i=number;i<n;i++)
            {
                array[i-number] = data[i];
            }
            for(int i=0;i<number;i++)
            {
                array[i+n-number] = data[i];
            }
            
            int max = min;
            for(int i=0;i<n;i++)
            {
                sum = sum + array[i];
                
                if(sum>max)
                {
                    max = sum;
                }
                
                if(sum<0)
                {
                    sum = 0;
                }
            }
            System.out.println("所有子数组的和的最大值为:"+max);
        }
    }

    结果截图:

    体会:

    这次还发现了一个问题,就是上次的代码中我没有考虑数组所有数都是负数的情况,对代码计算的部分进行了修改解决了问题。

  • 相关阅读:
    centos安装git
    centos安装nginx和配置
    centos安装samba服务和配置
    合理选择css3动画实现方式
    display:table-cell实现水平垂直居中
    活动的四种启动模式
    我是怎么选搜索引擎的
    这么用Mac才叫爽!
    Linux学习笔记
    软件测试暑期实习总结(2016)
  • 原文地址:https://www.cnblogs.com/wxyxxx/p/5395029.html
Copyright © 2011-2022 走看看