编程之美 - 数组最长子序列

原创 2016年06月01日 23:01:29
问题描述:
求一个一维数组的最长递增子序列,时间复杂度尽可能小。
例如:数组 1, -1,2,-3,4,-5,6,-7它的最长递增子序列是 1,2,4,6。


思路:
创建一个数组,用于记录到它为止递增元素的最大个数。
从目标数组的第一个元素开始,寻找从数组0元素开始到当前元素中间的递增的元素个数,并记录。

时间复杂度 O(N*N)。

#include <iostream>

using namespace std;

int getMaxSubSeq1(int arr[], int len)
{
    int ret = 0;
    int i = 0, j = 0;
    int* pSub = new int[len];

    for (i = 0; i < len; i++)
    {
        pSub[i] = 1;
        for (j = 0; j < i; j++)
        {
            if ((arr[i] > arr[j]) && (pSub[i] < pSub[j]+1))
            {
                pSub[i] = pSub[j]+1;
                if (pSub[i] > ret) ret = pSub[i];
            }
        }
    }

    delete[] pSub;
    pSub = NULL;

    return ret;
}

void main()
{
    int i = 0, len = 0;
    int test[] = {1, -1, 2, -3, 4, -5, 6, -7, 2};
    //int test[] = {1, -1, 2, 3, 4, -5, 6, -7, 2};
    //int test[] = {1, -1, 2, 3, 4, 5, 6, 7, 2};
    len = sizeof(test)/sizeof(test[0]);

    i = getMaxSubSeq1(test, len);

    cout << "max len = "<< i << endl;

    cin>> i;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

一个整数数组(正负,0),找出这个数组的最大子序列

http://blog.csdn.net/smking/article/details/4484070 数组子序列求和问题! Author: Kevin (刘鑫) 问题描述 有一整型数...
  • hbbdxs
  • hbbdxs
  • 2013年09月13日 09:55
  • 1304

编程之美2.18—数组分割

题目: 有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。 基本思想: 假设数组A[1..2N]所有元素的和是SUM。模仿动...
  • wtyvhreal
  • wtyvhreal
  • 2015年04月28日 11:37
  • 678

求数组最大子序列的和

题目:给出数组{4,-3,5,-2,-1,2,6,-2},求子序列的最大和。分别用一下两种方法解决。#include // 方法1: 分治法 //时间复杂度 O(NlogN) int max3(i...
  • a253664942
  • a253664942
  • 2016年04月03日 18:55
  • 1481

NYOJ17 单调递增最长子序列 【二分法】+【动态规划】

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • u012846486
  • u012846486
  • 2014年04月23日 17:53
  • 1413

编程之美 - 二维数组最大和的子序列

问题描述: 找出二维数组中的最大和的子序列。二维数组中的子序列是二维数组中的一个方块。 思路一: 使用暴力的方式,从每一个元素开始,变量以它为左上定点的所有的可构造的方块。 时间复杂度...
  • wangzhiyu1980
  • wangzhiyu1980
  • 2016年05月25日 10:06
  • 1017

【数据结构与算法】小于等于k的最大连续子序列和

使用Kadane算法可以在On内得到最大连续子序列和。如果要求得到和不超过k,那么该如何解决? 首先要看能不能继续使用Kadane算法。答案是不能。回顾Kadane,Kadane中使用dp[i]存最后...
  • u010900754
  • u010900754
  • 2017年03月05日 05:53
  • 687

动态规划之最长递增子序列 最长不重复子串 最长公共子序列

【前言】动态规划:与分治法相似,即通过组合子问题来求解原问题,不同的是分治法是将问题划分为互不相交的子问题,递归求解子问题,再将他们组合起来求出原问题的解。 动态规划则应用于子问题重叠的情况,通常用来...
  • sinat_25216047
  • sinat_25216047
  • 2016年05月11日 16:19
  • 1412

NYOj-17-单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • qq_32680617
  • qq_32680617
  • 2016年03月21日 21:18
  • 653

求最长子序列和

法一:O(n^3) #include #include int sub_Sum(int a[], int left, int right) { int i, temp_sum = 0;...
  • buaa_shang
  • buaa_shang
  • 2013年06月09日 00:58
  • 4396

【难】求数组(包括正负数和零)中相加的和(小于或)等于k的最长子数组的长度

题目:来自脑客爱刷题 给定一个无序数组arr,arr中元素可以是正数、负数和0,给定一个整数k,求arr所有子数组中,相加的和为k的最长子数组长度。 解法要求:时间复杂度O(N),额外空间复杂度...
  • bupt8846
  • bupt8846
  • 2015年01月05日 21:36
  • 1312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程之美 - 数组最长子序列
举报原因:
原因补充:

(最多只允许输入30个字)