zoukankan      html  css  js  c++  java
  • 连续最大子串的两种解法

    题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值,例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。

    时间复杂度为O(n)的算法

    #include <stdio.h>
    
    int maxsum(int s[],int len){
        int sum=0;
        int max=s[0];
        
        for(int i=0;i<len;i++){
            if(sum<=0){     //if sun<0 then cut before
                sum=s[i];
            }else{
                sum=sum+s[i];
            }
            if(sum>max){
                max=sum;
            }
        }
        return max;
    }
    
    int main(int argc, char *argv[]) {
        int s[]={-3,2,-3,3,-2,-4,-5};
        printf("%d",maxsum(s,7));
        return 0;
    }

    时间复杂度为O(n2)的算法

    #include <stdio.h>
    
    int maxsum(int s[],int len){    
        int max=s[0];
        for(int i=0;i<len;i++){
            for(int j=i;j<len;j++){
                int sum=0;
                sum=sum+s[i];
                if(sum>max){
                    max=sum;
                }
            }
        }
        return max;
    }
    
    int main(int argc, char *argv[]) {
        int s[]={-3,2,-3,3,7,-4,-5};
        printf("%d",maxsum(s,7));
        return 0;
    }
  • 相关阅读:
    C#网络爬虫 WebUtility使用 转义字符 urlCode
    C#遍历文件夹及文件
    ThreadException
    unhandledException
    linq to object
    扩展方法
    反射常规
    字典缓存和泛型缓存
    lock和Monitor(锁对象)
    单例模式
  • 原文地址:https://www.cnblogs.com/easyidea/p/10519470.html
Copyright © 2011-2022 走看看