突现灵感想出较新简单算法--实现求一数组最大子数组的和

一、题目:

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

  要求:

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

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

  3.求所有子数组的和的最大值。要求时间复杂度为O(n)。

二、设计思路

  首先将每一点看成辐射源,没点只能向右辐射找出所有可能的子数组求出最大值,如arr[5]={1,2,3,4,5}。首先1与1+2与1+2+3....到1+2+3+4+5找出最大值存入数组a[0]中。

再由2向右辐射找出所有可能的子数组求出最大值存入a[1]以此类推直至最后。在求出a[5]中最大值即为此数组最大子数组的和的最大值

三、代码


package com.minirisoft; import java.util.*; class SuperMax { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int[] list = new int[10];//输入数组是必须先定义数组,否则出错! int[] arr1 = new int[10];//输入数组是必须先定义数组,否则出错! System.out.println("请输入数组:"); for(int k=0;k<10;k++) { list[k]=sc.nextInt(); } for(int n=0;n<9;n++) { arr1[n]=list[n]; for(int m=n;m<9;m++) { arr1[m+1]=arr1[m]+list[m+1]; } for(int m=n;m<10;m++) { if(arr1[m]>arr1[n]) { arr1[n]=arr1[m]; } } System.out.println("从第"+n+1+"个元素辐射的最大子数组的和为"+arr1[n]); } arr1[9]=list[9]; for(int i=0;i<10;i++) { if(arr1[i]>arr1[0]) { arr1[0]=arr1[i]; } } System.out.println("最大子数组的和为"+arr1[0]); } }

四、实验截图

五、实验体验

有时候突发的灵感比苦做编程一天都重要。此次简单20分钟的编程41行代码完胜上个实验的8个小时

posted @ 2015-03-20 19:13  杨广鑫  阅读(171)  评论(4编辑  收藏  举报