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

原创 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;
}


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

相关文章推荐

编程之美2.16——求数组中最长递增子序列

问题: 求一个一维数组中最长递增子序列的长度。 解法1: 很明显用动态规划的算法,选取下面的阶段(这种选法极为常见),可使阶段间的关系具有无后效性。 阶段:在所有以元素k结尾的子数组中...

在一个乱序的数组中找到最长的递增子序列

这个题是牛客上左程云讲其他俄国沙皇问题是提及到的一个算法原型。代码中给出了两个思路。时间复杂度分别为 N^2 和 NlogN,源代码中没有给出注释,自己照着思路又重新捋了遍程序,稍微加了点注释,方便理...

无序数组中找到最长连续子序列

原始题目: 给定一个无序的整数序列, 找到最长的连续子序列。 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续子序列是[1, 2, 3, 4]。 ...

java实现求一个数组中有多少个子序列

import java.util.Scanner; /** * 牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A, * 他现...
  • pomay
  • pomay
  • 2017年05月25日 17:24
  • 570

将数组划分最少数目的排序子序列

题目描述: 定义排序子序列为数组中一段连续的子序列,并且这段子序列是非递增或非递减排序的。现有异常度为N的数组,求最少可将该数组分为几段排序子序列 输入描述: 输入第一行为一个正整数n(1 输...

数组子序列的个数

数组子序列的个数,比如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。 对于给出序列a,有些子序列可能是相同的,这里只算做1个,要求输出a的不同子序列的数量。 分析:如果对...
  • qingen1
  • qingen1
  • 2013年10月06日 22:43
  • 998

求数组最大子序列的和

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

动态规划----最长子序列

引出: 问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7….an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质,s1 例如有一个序列:1  7  3  5...

最长递增子序列详解(longest increasing subsequence)

一个各公司都喜欢拿来做面试笔试题的经典动态规划问题,互联网上也有很多文章对该问题进行讨论,但是我觉得对该问题的最关键的地方,这些讨论似乎都解释的不很清楚,让人心中不快,所以自己想彻底的搞一搞这个问题,...

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

问题描述: 找出二维数组中的最大和的子序列。二维数组中的子序列是二维数组中的一个方块。 思路一: 使用暴力的方式,从每一个元素开始,变量以它为左上定点的所有的可构造的方块。 时间复杂度...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程之美 - 数组最长子序列
举报原因:
原因补充:

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