zoukankan      html  css  js  c++  java
  • 2.MaxSubArray-Leetcode

    题目:最大连续子序列和
    思路:动态规划
    状态转移方程
    f[j]=max{f[j-1]+s[j],s[j]}, 其中1<=j<=n
    target = max{f[j]}, 其中1<=j<=n

    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
        if(nums.size()==0)return -1;
        if(nums.size()==1)return nums[0];
        vector<int>  res_vec(nums.size());
        res_vec[0]=nums[0];
        int max_val = nums[0];
        for(vector<int>::size_type i=1;i<nums.size();++i)
        {
            res_vec[i]=max(res_vec[i-1]+nums[i],nums[i]);
            if(max_val<res_vec[i])max_val = res_vec[i];   
        }
        return max_val;
        }
    };

    下面给出一个类似的题:
    给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度。要求给出伪码。

    f(n)A[n]
    f(n)=max(f(n1),max(f(n2)+A[n],A[n])

    int getMax(int a[],int len)
    {  
       int max1 = a[0];//表示maxSum(n-2);  
       int max2 = a[0]>a[1]? a[0]:a[1]; //表示maxSum(n-1);  
       int max3 = 0; // n 
       for(int i =2; i<len; i++){    
       max3 = Max(a[i],Max(max1+a[i],max2));
            max1 = max2; 
            max2  = max3; 
       } 
        return max3;
    }
  • 相关阅读:
    POI使用介绍
    Git的使用简介
    SOA架构搭建---duboo+zookeeper+SSM实现
    分布式事务介绍
    兼容安卓微信调用摄像头
    cookie
    js对手机软键盘的监听
    input 改变placeholder默认样式
    VisualVm使用JMX的方式连接远程JVM
    update批量根据条件更新
  • 原文地址:https://www.cnblogs.com/freeopen/p/5483034.html
Copyright © 2011-2022 走看看