给定一个长度为N的数组,找出一个最长的单调自增子序列
2016-08-18 23:29
357 查看
在牛客网上看到了这么道题
给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)
例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6.
结果做了一下午最终发现思路是错的,看了答案豁然明朗了,所以赶紧记录下来。
答题思想就是如果后者比前者大并且前者递增数组的长度+1大于后者递增数组的长度,就说明满足,
感觉描述不清楚,还是直接上代码吧。
反正就是那个样子,就是慢慢feel吧,太困了,虽然今晚有女排半决赛,但是我实在是太困了,女排加油,我先去睡会
给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)
例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6.
结果做了一下午最终发现思路是错的,看了答案豁然明朗了,所以赶紧记录下来。
答题思想就是如果后者比前者大并且前者递增数组的长度+1大于后者递增数组的长度,就说明满足,
感觉描述不清楚,还是直接上代码吧。
#include<iostream> #include<vector> using namespace std; int maxLen(int *a,int n) { vector<int> vlen(n,1); int maxLen=1; for(int i=1;i<n;++i) { for(int j=0;j<i;++j) { if(a[i]>a[j]&&vlen[j]+1>vlen[i]) vlen[i]=vlen[j]+1; } if(maxLen<vlen[i]) maxLen=vlen[i]; } return maxLen; } int main() { int T; while(cin>>T) { while(T) { --T; int n; cin>>n; int *a=new int ; for(int i=0;i<n;++i) cin>>a[i]; cout<<maxLen(a,n)<<endl; delete []a; } } return 0; }
反正就是那个样子,就是慢慢feel吧,太困了,虽然今晚有女排半决赛,但是我实在是太困了,女排加油,我先去睡会
相关文章推荐
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱). 第二解
- 给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数,请在这个特殊数组中找出给定的整数
- 获取一个数组中最长的连续的元素序列。例如,给定了[31,6,32,1,3,2],最长的连续的元素序列是[1,2,3],返回其长度3
- 算法导论 习题15.4-5 15.4-6 找出一个n个数的序列中最长的单调递增子序列
- 面试题:给定一个数组,数组中只包含0和1。请找到一个最长的子序列,其中0和1的数量是相同的
- 在一个字符串里面怎么找出最长回文子序列长度
- 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
- 给一个数组,找出数组中最长的连续数列的长度
- (Relax 后缀数组1.2)POJ 3261 Milk Patterns(求一个长度为n的整数序列中,至少出现k次的子序列的最长的长度)
- 给定一个字符串s,找出s中最长的回文子串,你可以假设s的最大长度是1000。
- 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请
- 一个长度为N的数组中包含正数 负数 0,请实现一个函数找出和为0的最长子数列
- 求一个数组的最长的单调自增子序列(C代码实现)
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 给定一个未排序数组, 找出其中最长的等差数列
- 求最长单调递增子序列的长度
- 给定一个数组,找出不在数组中的最小的那个数字
- Q:求数组中最长递增子序列的长度.
- 第25题: 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr),在字符串中找出连续最长的数字串,并把这个串的长度返回