• 连续最大子串的两种解法


    题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值,例如输入的数组为{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;
    }
  • 相关阅读:
    Java 之 Maven 基础
    JavaScript 之 RegExp 对象
    Java 之 Jedis
    Java 之 Redis 基础
    Java 之 NOSQL
    JavaWeb 之 JSON
    JavaWeb 之 Ajax
    【LeetCode-数组】外观数列
    【LeetCode-树】从先序遍历还原二叉树
    【LeetCode-数组】搜索二维矩阵 II
  • 原文地址:https://www.cnblogs.com/easyidea/p/10519470.html
Copyright © 2020-2023  润新知