zoukankan      html  css  js  c++  java
  • 19.2.8 [LeetCode 53] Maximum Subarray

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

    Example:

    Input: [-2,1,-3,4,-1,2,1,-5,4],
    Output: 6
    Explanation: [4,-1,2,1] has the largest sum = 6.
    

    Follow up:

    If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

    题意

    求连续子集的最大和

    题解

    其实我觉得这题挺难的|||

    首先是O(n)解法

     1 class Solution {
     2 public:
     3     int maxSubArray(vector<int>& nums) {
     4         int e = 1, n = nums.size(), ans = nums[0], now = nums[0];
     5         while (e < n) {
     6             now = max(now + nums[e], nums[e]);
     7             ans = max(now, ans);
     8             e++;
     9         }
    10         return ans;
    11     }
    12 };
    View Code

    然后是分治算法

     1 class Solution {
     2 public:
     3     int maxSubRange(vector<int>&nums, int x, int y) {
     4         if (x == y)return nums[x];
     5         int mid = (x + y) / 2;
     6         int lmax = maxSubRange(nums, x, mid), rmax = maxSubRange(nums, mid + 1, y);
     7         int tmp = 0, mmax = 0;
     8         for (int i = mid - 1; i >= x; i--) {
     9             tmp += nums[i];
    10             mmax = max(tmp, mmax);
    11         }
    12         tmp = mmax;
    13         for (int i = mid; i <= y; i++) {
    14             tmp += nums[i];
    15             mmax = max(tmp, mmax);
    16         }
    17         return max(mmax, max(lmax, rmax));
    18     }
    19     int maxSubArray(vector<int>& nums) {
    20         int e = 1, n = nums.size(), ans = nums[0], now = nums[0];
    21         while (e < n) {
    22             now = max(now + nums[e], nums[e]);
    23             ans = max(now, ans);
    24             e++;
    25         }
    26         return ans;
    27     }
    28 };
    View Code
  • 相关阅读:
    关于软件工程的理解
    二人编程项目----五子棋
    多线程单元测试
    软件工程的 理解和问题
    教务管理系统软件设计说明书
    团队分组
    结对项目:贪吃蛇
    使用JUNIT等工具进行单元测试
    学习软件工程现存问题
    对unit4测试的初步认知
  • 原文地址:https://www.cnblogs.com/yalphait/p/10356399.html
Copyright © 2011-2022 走看看