zoukankan      html  css  js  c++  java
  • [LeetCode系列]最大连续子列递归求解分析

    本文部分参考Discuss: LeetCode.

    步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含.

    步骤2.

      步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1.

      步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最后一个元素--中间元素)加上右子列的最大前缀子列(即包含右子列第一个元素--中间元素)

    步骤3. 返回三者中的最大值(左子列最大值, 右子列最大值, 二者拼接最大值).

     1 class Solution {
     2 public:
     3     int maxSubArray(int A[], int n) {
     4         // IMPORTANT: Please reset any member data you declared, as
     5         // the same Solution instance will be reused for each test case.
     6         if(n==0) return 0;
     7         return maxSubArrayHelperFunction(A,0,n-1);
     8     }
     9 
    10     int maxSubArrayHelperFunction(int A[], int left, int right) {
    11         if(right == left) return A[left];
    12         int middle = (left+right)/2;
    13         int leftans = maxSubArrayHelperFunction(A, left, middle);
    14         int rightans = maxSubArrayHelperFunction(A, middle+1, right);
    15         int leftmax = A[middle];
    16         int rightmax = A[middle+1];
    17         int temp = 0;
    18         for(int i=middle;i>=left;i--) {
    19             temp += A[i];
    20             if(temp > leftmax) leftmax = temp;
    21         }
    22         temp = 0;
    23         for(int i=middle+1;i<=right;i++) {
    24             temp += A[i];
    25             if(temp > rightmax) rightmax = temp;
    26         }
    27         return max(max(leftans, rightans),leftmax+rightmax);
    28     }
    29 };

     

  • 相关阅读:
    node的function函数和路由代码的小例子
    关于node回调函数中同步和异步操作的理解
    node初学
    CTF知识点总结(二)
    知识图谱
    论文笔记 无监督与混合IDS
    CTF知识点总结(一)
    论文笔记 网络安全图谱以及溯源算法
    攻防世界 wtf.sh-150
    攻防世界 Web_php_wrong_nginx_config
  • 原文地址:https://www.cnblogs.com/lancelod/p/3881093.html
Copyright © 2011-2022 走看看