用c语言写一个判断最长上升子序列的函数
时间: 2024-11-06 20:24:37 浏览: 23
C语言:基于c代码实现的最长上升子序列
在C语言中,可以使用动态规划的方法编写一个用于计算给定整数数组最长上升子序列长度的函数。下面是一个基本的实现,它使用了二维数组`dp`来存储每个元素到当前位置为止的最大上升子序列长度:
```c
#include <stdio.h>
int lengthOfLIS(int arr[], int n) {
if (n == 0) return 0;
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;
}
}
}
return *max_element(dp, dp + n); // 找到并返回最大值
}
int main() {
int arr[] = {10, 9, 2, 5, 3, 7, 101, 18};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Length of longest increasing subsequence: %d\n", lengthOfLIS(arr, n));
return 0;
}
```
这个函数首先初始化一个大小为`n`的一维数组`dp`,其中`dp[i]`表示以`arr[i]`结尾的最长上升子序列长度。然后遍历数组,对于每个元素,检查之前的所有元素是否能形成更长的上升子序列,并更新`dp[i]`。最后,通过`max_element`找到并返回`dp`数组中的最大值,即为最长上升子序列的长度。
阅读全文