子数组的最大和

来源:互联网 发布:微信开发教程 python 编辑:程序博客网 时间:2024/05/22 05:10
package com.shiyeqiang.test1;/** * 题目3:(求数组中子序列和的最大值!!) * 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 * 求所有子数组的和的最大值。 * 要求时间复杂度为O(n)。 例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7,  2,因此输出为该子数组的和18。  * * @author Shiyeqiang * */public class Test3 { public static void main(String[] args) {  int[] arr = new int[] { 1, -2, 3, 10, -4, 7, 2, -5 };  System.out.println(fun(arr)); } /**  * 采取动态规划的思想求最大递增子序列的和 算法思想:①:首先判断数组是否有意义;  * ②:定义一个游标,将该游标与当前的最大值进行比较;  * 如果:游标大,则将最大值更新为游标的取值; 如果游标的值为为负数,则将游标的值为0;;  * ③:遍历完成以后,如果结果为为0,则说明最终结果应该是取得数组中的最大值!  *  *  */ public static int fun(int[] arr) {  // 1:首先判断数组是否有意义  if (arr.length == 0 || arr == null) {   return 0;  }         //1, -2, 3, 10, -4, 7, 2, -5   int result = 0; //0  int temp = result;     //0  for (int i = 0; i < arr.length; i++) {   temp += arr[i];           //1,-1,3,13,9,16,18,13   if (temp < 0) {    temp = 0;     //0,则前面的将丢弃,因为是求得最大值的和的形式啊   }   if (temp > result) {    result = temp;      //1,3,13,16,18   }  }  if (result == 0) {     //则这个时候将是取得字符串的最大值   result = arr[0];   for (int i = 0; i < arr.length; i++) {    if (result < arr[i]) {     result = arr[i];    }   }  }  return result; }  }

0 0
原创粉丝点击