leetcode 53最大子序和

题目:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6

解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

穷举 时间复杂度O(n)
public static int maxSubArray(int[] nums) {

      //结果

      int result = Integer.MIN_VALUE;


      //data为子序和 l为索引

      for (int data =0, l = 0; l < nums.length; l++) {

        //nums数组的数据可能都为负数,也可能只有一个正数。所以必须计算max,并保存

        result = Math.max(result, nums[l]);

        //子序和 < (当前的子序和)

        if(data<(data+=nums[l])){

          //计算max

          result = Math.max(result, data);

        }

        //如果 当前子序和 <0 那就放弃这一段数据。计入下一次计算只会让数据变小

        //只要 当前子序和 >0 就继续计入下一次计算

        if(data < 0){

          data = 0;

        }

      }

      return result;

    }

代码很简单,如果使用两层for循环写,可能是把问题想复杂了。这里就不做过多的讲解了

分治法还不会 !!!!晚点研究下

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容