最长连续递增子序列

解题思路: 遍历一遍,保存一个全局的最大长度,复杂度为O(n)

#include<iostream>
#include <vector>
using namespace std;

int longest_subarray(vector<int> data){
	int current = 1;
	int size = data.size();
	int res = 1;
	for (int i = 1; i < size; i++)
	{
		if (data[i]>data[i - 1])
		{
			current++;
		}
		else{
			if (current > res)
			{
				res = current;
			}
			current = 1;
		}
	}
	return res;

}


int main()
{
	int data[] = { 2, 4, 3, 6, 3, 2, 5, 5 };
	vector<int> vec(data,data+8);
	int result = longest_array(vec);
	printf("%d\n", result);
	getchar();
	return 0;
}


在C语言中,求解最长连续递增子序列(Longest Increasing Subsequence, LIS)通常是一个经典的问题,可以使用动态规划方法来解决。这个问题的目标是找出一个给定数组中最长子序列,其中每个元素都大于前一个元素。 这里有一个常见的Kadane's算法的例子: ```c #include <stdio.h> #include <stdlib.h> int longest_increasing_subsequence(int arr[], int n) { if (n == 0) return 0; // 初始化一个长度为n的一维数组dp,所有元素都是1(因为每个元素本身都是其自身的子序列) int dp[n]; for (int i = 0; i < n; i++) dp[i] = 1; // 从第二个元素开始遍历,尝试将当前元素添加到之前已找到的最长递增子序列中 for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { // 如果当前元素大于前一个元素,更新dp[i]为dp[j]+1,如果新值更大,则更新 if (arr[i] > arr[j]) dp[i] = max(dp[i], dp[j] + 1); } } // 最后,返回dp数组中的最大值作为结果 int result = *max_element(dp, dp + n); return result; } // 使用max函数需要包含头文件 // #include <algorithm> int main() { int arr[] = {10, 9, 2, 5, 3, 7, 101, 18}; int n = sizeof(arr) / sizeof(arr[0]); printf("Length of the longest increasing subsequence is %d\n", longest_increasing_subsequence(arr, n)); return 0; } ``` 这个程序会计算并输出给定整数数组`arr`中最长递增子序列的长度。如果你有其他问题或需要进一步的解释,请告诉我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值