zoukankan      html  css  js  c++  java
  • Lintcode: Minimum Subarray

    C++

    Divide-Conquer[71% passed]

     1 class Solution {
     2 public:
     3     /**
     4      * @param nums: a list of integers
     5      * @return: A integer denote the sum of minimum subarray
     6      */
     7     int minSubArray(vector<int> nums) {
     8         // write your code here
     9         int n = nums.size();
    10         if (n == 1) {
    11             return nums[0];
    12         }
    13         int *arr = nums.data();
    14         return helper(arr, n);
    15     }
    16     int helper(int *arr, int n) {
    17         // terminate
    18         if ( n == 1 ) {
    19             return arr[0];
    20         }
    21         // divide
    22         int mid = n>>1;
    23         int ans = min(helper(arr, mid), helper(arr + mid, n - mid));
    24         // conquer
    25         int now = arr[mid - 1], may = now;
    26         for (int i = mid-2; i >= 0; --i) {
    27             may = min(may, now += arr[i]);
    28         }
    29         now = may;
    30         for (int i = mid; i <= n; ++i) {
    31             may = min(may, now += arr[i]);
    32         }
    33         // return
    34         return min(may, ans);
    35     }
    36 };

    C++, dp

     1 class Solution {
     2 public:
     3     /**
     4      * @param nums: a list of integers
     5      * @return: A integer denote the sum of minimum subarray
     6      */
     7     int minSubArray(vector<int> nums) {
     8         // write your code here
     9         int n = nums.size();
    10         if (n == 1) {
    11             return nums[0];
    12         }
    13         vector<int> dp(n);
    14         dp[0] = nums[0];
    15         int ans = nums[0];
    16         for (int i = 1; i < n ; ++i) {
    17             dp[i] = min(nums[i], dp[i - 1]+nums[i]);
    18             ans = min(dp[i], ans);
    19         }
    20         return ans;
    21     }
    22 };

    C++,dp,O(1) space

     1 class Solution {
     2 public:
     3     /**
     4      * @param nums: a list of integers
     5      * @return: A integer denote the sum of minimum subarray
     6      */
     7     int minSubArray(vector<int> nums) {
     8         // write your code here
     9         int n = nums.size();
    10         if (n == 1) {
    11             return nums[0];
    12         }
    13         int endHere = nums[0];
    14         int ans = nums[0];
    15         for (int i = 1; i < n ; ++i) {
    16             endHere = min(nums[i], endHere+nums[i]);
    17             ans = min(endHere, ans);
    18         }
    19         return ans;
    20     }
    21 };
  • 相关阅读:
    NSString+URLEncoding
    编码解码
    RESTful架构理解
    jvm调优
    java大数据处理调优
    SQL 优化
    正确处理下载文件时HTTP头的编码问题(Content-Disposition)
    Spring 多媒体(文件上传)支持
    mybatis类型转换
    log4j Spring aop 注解的日志管理
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/5006769.html
Copyright © 2011-2022 走看看