• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
闲晴
博客园    首页    新随笔    联系   管理    订阅  订阅
课堂练习&课下作业

设计思路:

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

源代码:

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);
    }
}

结果截图:

体会:

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

posted on 2016-04-15 13:01  闲晴  阅读(144)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3