给定一个整数数组,找到其中最长严格递增子序列的长度,并输出一个最长严格递增子序列。用C语言写出代码
时间: 2024-12-10 15:50:09 浏览: 86
在C语言中,我们可以使用动态规划的方法来解决这个问题。下面是一个简单的代码示例,用于找到给定整数数组中最长的严格递增子序列的长度:
```c
#include <stdio.h>
int lengthOfLIS(int arr[], int n) {
int dp[n];
dp[0] = 1; // 初始化第一个元素的子序列长度为1
for (int i = 1; i < n; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (arr[j] < arr[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
}
}
}
// 找到最长递增子序列的最大值就是结果
int max_len = *max_element(dp, dp+n);
return max_len;
}
int main() {
int arr[] = {10, 9, 2, 5, 3, 7, 101, 18};
int n = sizeof(arr)/sizeof(arr[0]);
int longest_len = lengthOfLIS(arr, n);
printf("Length of the longest strictly increasing subsequence is: %d\n", longest_len);
// 输出最长子序列,这里仅提供求长度的方法,需要额外数据结构保存每个位置的最长子序列才能打印
// 这部分代码不在本例中直接给出,实际应用中你可以考虑使用栈或动态存储等。
return 0;
}
```
这个函数`lengthOfLIS`利用了一个辅助数组`dp`,其中`dp[i]`表示以`arr[i]`结尾的最小子序列的长度。内层循环遍历之前的所有元素,如果当前元素比前一个大并且可以构成更长的子序列,则更新`dp[i]`。最后返回`dp`中的最大值即为所求的最长严格递增子序列的长度。
阅读全文
相关推荐

















