|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题
- 给定序列,请求出其最长连续上升子序列的长度。
- 注意:是连续上升子序列,不是最长上升子序列。
- 输入格式:
- 第一行为一个整数n(0<n<=1000),代表序列总长度。第二行为用空格分隔n个整数。测试用例保证所有整数可以用int类型存储。
- 输出格式:
- 只有一个整数,为给定序列最长连续上升子序列的长度。
- 输入样例:
- 15
- 1 1 2 3 4 5 6 7 3 3 5 5 3 3 9
- 输出样例:
- 7
复制代码
我的代码
- #include<stdio.h>
- int main()
- {
- int n; scanf("%d",&n);
- int shuzu[n],num;
- int a,b,c=0,e;
- int count1=0,count2 = 0;
-
- for(a=0; a<n ;a++)
- {
- scanf("%d",&num);
- shuzu[a] = num;
- }a=0;
-
-
- while(a<n)
- {
- for(b=c;b<n;b++)
- {
- if(shuzu[b] < shuzu[b+1])
- {
- count1++;
- }
- else
- {
- if(count1 <= count2)
- {
- ;
- }
- else
- {
- e = count1;
- count1 = count2;
- count2 = e;
- }
- c = b;
- break;
- }
- }
- a = b + 1;
- }
-
- printf("%d",count2);
-
- return 0;
- }
复制代码
问题分析:
题目要求求出给定序列的最长连续上升子序列的长度,可以使用双指针法来解决。
修改建议:
下面是修改后的代码,可以正确计算给定序列的最长连续上升子序列的长度。
- ++
- #include <stdio.h>
- int main()
- {
- int n, max_len = 1, len = 1;
- scanf("%d", &n); // 输入序列总长度
- int nums[n];
- for (int i = 0; i < n; i++) {
- scanf("%d", &nums[i]); // 输入序列元素
- }
- for (int i = 1; i < n; i++) {
- if (nums[i] > nums[i - 1]) { // 如果当前元素大于前一个元素,则更新最长子序列长度
- len++;
- } else { // 否则重置最长子序列长度
- len = 1;
- }
- max_len = len > max_len ? len : max_len; // 更新最大长度
- }
- printf("%d", max_len);
- return 0;
- }
复制代码
在修改后的代码中,首先读入序列总长度和序列元素,然后使用双指针法扫描序列,统计最长连续上升子序列的长度:
1. 用一个变量记录当前最长子序列的长度,初始为1;
2. 遍历序列,如果当前元素大于前一个元素,则更新最长子序列长度,否则重置最长子序列长度;
3. 在遍历过程中,用一个变量记录最大长度。
最后输出最大长度即可。
希望能帮到你!
球一个最佳答案谢谢啦!这对我非常重要!  
|
|