代碼題(5)— 數組最大子序列


1、最大子序和

給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,為 6。
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if(nums.size() == 0)
            return -1;
        int sum = nums[0];
        int maxsum = nums[0];
        for(int i=1;i<nums.size();++i)
        {
            if(sum>0)
                sum = sum+nums[i];
            else
                sum = nums[i];
            if(maxsum < sum)
                maxsum = sum;
        }
        return maxsum;
        
    }
};
2、最長上升子序列

給定一個無序的整數數組,找到其中最長上升子序列的長度。

示例:

輸入: [10,9,2,5,3,7,101,18]
輸出: 4 
解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4.
 
         
//方法一:算法復雜度是 n*n
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        if(nums.empty())
            return 0;
        int res = 0;
        vector<int> maxLen(nums.size(), 0);
        for(int i=0;i<nums.size();++i)
        {
            for(int j=0;j<i;++j)
            {
                if(nums[j]<nums[i] && maxLen[i] < maxLen[j])
                    maxLen[i] = maxLen[j];
            }
            maxLen[i] = maxLen[i] + 1;
            if(res < maxLen[i])
                res = maxLen[i];
        }
        return res;
    }
};

 

3、最長上升子序列和
對於每組測試數據,輸出其最大上升子序列和。
比如,對於序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。這些子序列中序列和最大為18,為子序列(1, 3, 5, 9)的和. 你的任務,就是對於給定的序列,求出最大上升子序列和。注意,最長的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和為100,而最長上升子序列為(1, 2, 3)。
#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    int N = 0;
    
    while(cin>>N)
    {
        int result = 0;
        int nums[N],maxSum[N];
        for(int i=0;i<N;++i)
            cin>>nums[i];
        for(int i=0;i<N;++i)
        {
            maxSum[i] = nums[i];
            for(int j=0;j<i;++j)
            {
                if(nums[j]<nums[i] && maxSum[j]+nums[i] > maxSum[i])
                    maxSum[i] = maxSum[j]+nums[i];
            }
            if(result < maxSum[i])
                result = maxSum[i];
        }
        cout<<result<<endl;
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM