• MaxSubArray 最大子数列和


    1 public int maxSubArray(int[] A) {
    2            int newsum=A[0];
    3            int max=A[0];
    4            for(int i=1;i<A.length;i++){
    5                newsum=Math.max(newsum+A[i],A[i]);
    6                max= Math.max(max, newsum);
    7            }
    8            return max;
    9         }
     1 int maxSubArray(int *a, const int length) 
     2 { 
     3     int maxSumSubArray = 0; 
     4     int sum_i = 0;  
     5     for(int i=0; i <length; i++) 
     6     { 
     7        sum_i = sum_i + a[i]; 
     8        if(sum_i < 0) sum_i = 0; 
     9         else 
    10         { 
    11             if(sum_i > maxSumSubArray) maxSumSubArray = sum_i; 
    12         } 
    13     } 
    14  
    15     //若是数组中的元素均为负值 
    16     if(sum_i==0) 
    17     { 
    18         for(int i=0; i < length; i++) 
    19         { 
    20             if(a[i] > maxSumSubArray) maxSumSubArray = a[i]; 
    21         } 
    22     }    
    23     return maxSumSubArray;     
    24 } 

    还有一种是分治算法 自己写的 复杂度O(nlogn)

     1 #include<iostream>
     2 using namespace std;
     3 int MaxSubArray(int *A,int low,int high){
     4     if(low==high) return A[low];
     5     int mid=(low+high)/2;
     6     int maxl=MaxSubArray(A,low,mid);
     7     int maxr=MaxSubArray(A,mid+1,high);
     8     int maxleft=A[mid],maxright=A[mid+1],maxsum;
     9     maxsum=A[mid];
    10     if(mid-1>=low)
    11     for(int i=mid-1;i>=low;i--){
    12         maxsum=maxsum+A[i];
    13         maxleft=max(maxsum,maxleft);
    14     } 
    15     maxsum=A[mid+1];
    16     if(mid+2<=high)
    17     for(int i=mid+2;i<=high;i++){
    18         maxsum=maxsum+A[i];
    19         maxright=max(maxsum,maxright);
    20     } 
    21     int cross=maxleft+maxright;
    22     return max(cross,max(maxl,maxr));
    23     
    24 }
    25 int main(){
    26     int a[]={1,-4,1,3,-4,2};
    27     cout<<MaxSubArray(a,0,5)<<endl;
    28     return 0;
    29 }
  • 相关阅读:
    数据结构与算法
    android vitamio的坑
    Fragment的坑
    scrollview里面嵌套listview的坑
    关于微信小程序的tabbar
    Intent初级学习
    HDU 4562 守护雅典娜
    SGU 542 Gena vs Petya
    [二] EditText and Button
    A Data Structure for Dynamic Trees
  • 原文地址:https://www.cnblogs.com/verlen11/p/4432902.html
Copyright © 2020-2023  润新知