zoukankan      html  css  js  c++  java
  • 剑指offer系列56---连续子数组的最大和

    【题目】输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。
    * 求所有子数组和的最大值。
    * 【思路】连续求和数组元素。一旦得到的和小于0,就抛弃前面的数组,从当前值重写开始求和。

     1 package com.exe11.offer;
     2 
     3 /**
     4  * 【题目】输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。
     5  *             求所有子数组和的最大值。
     6  * 【思路】连续求和数组元素。一旦得到的和小于0,就抛弃前面的数组,从当前值重写开始求和。
     7  * 
     8  * @author WGS
     9  *
    10  */
    11 public class FindGreatestSumOfSubArray {
    12     
    13     boolean invalidInput=false;//使用一个全局变量标志数组非法输入情况,区别此时返回的0值和正常情况得到的0值
    14     public int getMaxVal(int[] nums){
    15         if(nums==null ||nums.length <=0){
    16             invalidInput=true;
    17             return 0;
    18         }
    19         //invalidInput=false;//不知道为什么要重新设置为false
    20         int curSum=0;
    21         int maxSum=0x80000000;//整型数最小值
    22         for(int i=0;i<nums.length;i++){
    23             if(curSum>=0){
    24                 curSum+=nums[i];
    25             }else{
    26                 curSum=nums[i];
    27             }
    28             //
    29             if(curSum>maxSum)
    30                 maxSum=curSum;
    31         }
    32         return maxSum;
    33         
    34     }
    35     
    36     public static void main(String[] args) {
    37         FindGreatestSumOfSubArray f=new FindGreatestSumOfSubArray();
    38         //int[] nums=new int[]{1,-2,3,10,-4,7,2,-5};
    39         //int[] nums=new int[]{1,2,3};
    40         //int[] nums=new int[]{-1,-2,-3};
    41         int[] nums=new int[]{};
    42         int n=f.getMaxVal(nums);
    43         System.out.println(n);
    44     }
    45     
    46 }
  • 相关阅读:
    01背包回溯法
    网络嗅探器
    侦听局域网内密码
    Winsock协议目录
    LSP(分层服务提供者)
    n后问题回溯法
    批处理作业调度回溯法
    图m着色问题
    SPI概述
    符号三角形问题回溯法
  • 原文地址:https://www.cnblogs.com/noaman/p/5637875.html
Copyright © 2011-2022 走看看