zoukankan      html  css  js  c++  java
  • [leetcode]Maximum Subarray

    问题描写叙述:

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

    For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
    the contiguous subarray [4,−1,2,1] has the largest sum = 6.


    基本思路:

    遍历并记录最大的subarray值。O(n)时间算法


    代码:

    int maxSubArray(int A[], int n) {  //C++
            int max = A[0];
            int tmp = 0;
            for(int i = 0; i < n; i++)
            {
                tmp += A[i];
                if(tmp > max)
                    max = tmp;    
                if(tmp < 0){
                    tmp = 0;
                }
            }
            return max;
        }


    分治法

    int divideConquer(int A[], int low, int high){  //C++
            if(low == high)
                return A[low];
            
            int mid = (low + high)/2;
            int sum1 = divideConquer(A, low , mid);
            int sum2 = divideConquer(A, mid+1, high);
            int sum3 = findMidMax(A,low,high,mid);
            
            int max;
            max = (sum1 > sum2)? sum1:sum2;
            max = (max > sum3)?

    max: sum3; // cout << low << high << mid <<max; return max; } int findMidMax(int A[] , int low , int high, int mid){ int max = A[mid],tmp = 0,sum = 0; int i = mid; while(i >= low ) { tmp +=A[i]; if(tmp > max) max = tmp; i--; } sum = max; max = 0 , tmp = 0; int j = mid+1; while(j <= high) { tmp +=A[j]; if(tmp > max) max = tmp; j++; } sum += max; return sum; } int maxSubArray(int A[], int n) { return divideConquer(A,0,n-1); }





  • 相关阅读:
    通知
    KVO详解
    KVC详解
    KVC/KVO总结
    结构体Struct
    检测文件(夹)大小
    NSFileHandle&&NSFileManage
    ***NSFileManager
    获取文件扩展名
    MySql数据库_03
  • 原文地址:https://www.cnblogs.com/llguanli/p/8513897.html
Copyright © 2011-2022 走看看