• 返回一个整数数组中最大子数组的和3


    要求:

    • 输入一个整形数组,数组里有正数也有负数。

    • 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    • 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。

    • 同时返回最大子数组的位置。 求所有子数组的和的最大值。要求时间复杂度为O(n)。

    设计思路:核心算法同求一个最大子数组的和Ⅱ相同,将所有数组一遍循环改为无限循环,只需选一个时间跳出即可。

    具体代码如下:

     1     public static void main(String[] args){
     2         int numberLength = 10;
     3         int a[] = new int[numberLength];
     4         for(int i = 0;i < numberLength;i++){
     5             a[i] = (int)(Math.random() * 20 - 10);   // 产生的随机数范围在-9 ~ 9
     6         }
     7         System.out.print("产生的随机数的值为:");
     8         for(int i = 0;i < numberLength;i++){
     9             System.out.print(a[i] + " ");
    10         }
    11         System.out.print("
    ");
    12         
    13         int sum = a[0],temp = 0,left = 0,right = 1,i = -1,r = -1;
    14         while(1!=0){
    15             i++;
    16             r = i % numberLength;
    17             temp = temp + a[r];
    18             if(temp < a[r]){
    19                 temp = a[r];
    20                 left = i;
    21             }
    22             if(temp >= sum){
    23                 sum = temp;
    24                 right = i;
    25             }
    26             // 如果循环两圈以上,或者将所有的数全部加上,则跳出。
    27             if(i/numberLength > 2 || Math.abs(i - left)== numberLength){
    28                 break;
    29             }
    30         }
    31         
    32         System.out.println("最大字数组的和为:" + sum);
    33         System.out.println("边界为:" + ((left%numberLength)+1) + " 到  " + ((right%numberLength)+1));
    34     }

    个人总结:在while循环的跳出时,需考虑周全。

  • 相关阅读:
    乐乐的作业
    Spring中配置数据源的5种形式
    乐观锁和悲观锁的区别
    使用Nexus搭建Maven私服
    Maven错误记录
    Maven学习笔记(一)
    Eclipse的SVN插件下载
    SSH整合(Struts2+Spring+Hibernate)
    java.lang.NoClassDefFoundError: org/objectweb/asm/Type
    使用mss2sql将SqlServer转换为Mysql
  • 原文地址:https://www.cnblogs.com/jj352095583/p/4416850.html
Copyright © 2020-2023  润新知