1-9 最长连续递增子序列 (20 分)

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

输入格式:

输入第1行给出正整数n(≤10
​5
​​ );第2行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。

输入样例:

15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10

输出样例:

3 4 6 8

我的分析

先记录一下第一个序列的位置,比如:1 9 2 5 7 3 4 6 8 0 11 15 17 17 10中,我先记下位置pos = k ;(此时k=0,所以第一个序列位置为0)。并设置序列长度为1(len=1;),然后再看从数字1开始的这个序列最长能到哪里,用for(;a[k]<a[k+1];k++)中的a[k]<a[k+1]来判断。
若后面的数字大于当前数字,则满足递增,同时len++;序列长度加一。例如:1<9 , len:1->2。9>2,不满足递增,则以第一个数字1为首的最大序列找到。
将全局变量mpos和mlen,分别赋值为pos和len,表示当前最长的序列的下标和长度。
之后从第2个数字开始,继续循环。每次要和全局变量mpos和mlen比较,修改mpos和mlen。
最后得到的是最后出现的最长的序列,但不一定是第一个,所以要在找一次,寻找递增数列len==mlen的。
因为做的事情和之前一样,所以就又在原来的函数中添加了一个判断。

 if(flag&&len==mlen2){mpos=pos;}

用了mlen2来保存最大长度。还用了一个标志变量flag,以确保第一次调用的时候不会执行这部分。

我的代码(20分的放心用,虽然这代码可能不咋地)
#include <stdio.h>
#define N 100000
int mlen;
int mlen2;
int flag=0;
int mpos;
void find(int *a,int n);
int main ()
{int i,n;int * a;scanf("%d",&n);a=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++){scanf("%d",a+i);}find(a,n);//printf("%d %d\n",mpos,mlen); 测试用的mlen2=mlen;find(a,n);for(i=mpos;i<mpos+mlen2-1;i++){printf("%d ",a[i]);}printf("%d",a[i]);return 0;
}void find(int *a,int n){int i,k,sum,pos,max=0,len;for(i=0;i<n-1;i++){k=i;pos=k;len=1;for(;a[k]<a[k+1];k++){len++;}if(flag&&len==mlen2){mpos=pos;}if(mlen<len){mlen=len;mpos=pos;}}}
要是看不懂我写的,就别看了,我也隐隐觉得这想法和代码都有点渣。我再去看看别人的想法,实践后再来更新。
——————————更新 ———————————
下面的这段代码和我的想法一样,不过他是在函数中直接找到了并能输出第一个出现的。(他是靠同时记录了序列的起始位置完成的,我的没有记录结尾下标,就只能再调用一次了。)

来源https://blog.csdn.net/qq_36913610/article/details/82319910

#include <stdio.h>
#define MAXSIZE 100000
typedef struct Node{int Data[MAXSIZE];int size;
}Node, *List; /*传递结构指针效率高*/
List Read(List L);
void PrintSeq(List L);int main(void){Node node;List L = &node;L = Read(L);PrintSeq(L);return 0;
}List Read(List L){int n, i;scanf("%d", &n);L->size = n;for(i=0; i<n; i++){scanf("%d", &L->Data[i]);}return L;
}void PrintSeq(List L){int maxL, maxR, maxLen, l, r, len;int i;if(L->size==0)return;else{maxL=maxR=0;maxLen = 1;}l=r=0;len = 1;for(i=1; i<L->size; i++){if(L->Data[i]>L->Data[i-1]){r++;len++;}else{ /*遇到非增长点更新*/if(len>maxLen){maxL = l;maxR = r;maxLen = len;}l=r=i;len = 1;}}if(len>maxLen){ /*遍历结束后再次判断以防遗漏*/maxL = l;maxR = r;maxLen = len;}for(i=maxL; i<=maxR; i++){if(i==maxL)printf("%d", L->Data[i]);elseprintf(" %d", L->Data[i]);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-1 顺序表操作集 (20 分)

本题要求实现顺序表的操作集。 函数接口定义&#xff1a; List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P );其中List结构定义如下&#xff1a; typedef int Position; t…

1-5 线性表元素的区间删除 (20 分)

题目&#xff1a; 给定一个顺序存储的线性表&#xff0c;请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储&#xff0c;并且相对位置不能改变。 函数接口定义&#xff1a; List Delete( List L, ElementType minD, ElementType maxD );其…

Unknown storage engine 'InnoDB'

报错情况&#xff1a;在导入数据时候发现找不到InnoDB这个错误&#xff0c;之前查看博客时候明白了IsAsm数据库和InnoDB这两个的区别了。 解决方案&#xff1a; 尝试一&#xff1a;将my.ini配置文件的isasm改成InnoDB。这个是之前参考博客完成。但是这个没有奏效。 尝试二&…

2-10 [搞定!]出栈序列的合法性 (20 分)

给定一个最大容量为 M 的堆栈&#xff0c;将 N 个数字按 1, 2, 3, …, N 的顺序入栈&#xff0c;允许按任何顺序出栈&#xff0c;则哪些数字序列是不可能得到的&#xff1f;例如给定 M5、N7&#xff0c;则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 }&#xff0c;但不可能得到{ 3, 2…

Java中有关Null的9件事

对于Java程序员来说&#xff0c;null是令人头痛的东西。时常会受到空指针异常&#xff08;NPE&#xff09;的骚扰。连Java的发明者都承认这是他的一项巨大失误。Java为什么要保留null呢&#xff1f;null出现有一段时间了&#xff0c;并且我认为Java发明者知道null与它解决的问题…

3-5 单链表分段逆转 (20 分)

给定一个带头结点的单链表和一个整数K&#xff0c;要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K3&#xff0c;你需要将链表改造成 3→2→1→6→5→4&#xff1b;如果 K4&#xff0c;则应该得到 4→3→2→1→5→6。 函数接口定义&#xff1a; v…

studio快捷键

转载于:https://www.cnblogs.com/hoobey/p/6431027.html

c语言编写单片机技巧

1. c语言和汇编语言在开发单片机时各有哪些优缺点&#xff1f; 答&#xff1a;汇编语言是一种用文字助记符来表示机器指令的符号语言&#xff0c;是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的cpu&#xff0c;其汇编语言可能有所差异&#xf…

7-1 叶节点求和 (30 分)

对给定的有N个节点&#xff08;N>0&#xff09;的二叉树&#xff0c;求叶节点元素之和。 输入格式: 第一行是一个非负整数N&#xff0c;表示有N个节点 第二行是一个整数k&#xff0c;是树根的元素值 接下来有N-1行&#xff0c;每行是一个新节点&#xff0c;格式为 r d e …

Docker的学习笔记(开发的技术分享转发)

我的Docker学习记录一、安装dockeryum install -y docker-io二、使用docker1、下载镜像docker pull <image>2、查询镜像docker search <image> 3、从镜像运行容器docker run -it --name <name> <image> /bin/bash4、后台运行docker run -itd --name &l…

PhoneUtils

import java.util.regex.Matcher; import java.util.regex.Pattern;public class PhoneUtils {/*** param phoneNo* 加星号过的电话号码*/public static String dealPhoneNo(String phoneNo) {return phoneNo.substring(0, 3) "****" phoneNo.substring…

批量更新

这是最基本的批量更新。我使用的时候还不如逐条。 这好像还是官方的批量更新&#xff0c;反正不咋地。 ///批量更新&#xff0c;效率太低&#xff0c;不如逐条更新static void Update(){SqlDataAdapter sda new SqlDataAdapter("select PID,FMAddress,MeanValue1,StatsVa…

java实例练习——基于TCP/IP协议的多客户端通信

先说一下大概的思路&#xff1a; 应用多线程来实现服务器与多客户端之间的通信 1、服务器端创建ServerSocket&#xff0c;循环调用accept&#xff08;&#xff09;等待客户端连接&#xff1b; 2、客户端创建一个Socket并请求与服务器端连接&#xff1b; 3、服务器端接受客户端请…

windows资源管理器已停止工作后,使用命令提示窗口拷贝文件和运行exe程序

电脑异常现象&#xff1a; 需要从优盘拷贝NetAssist.exe软件至电脑进行运行&#xff0c;发现双击无法打开我的电脑和文件夹&#xff0c;点击提示的重新启动程序问题后仍存在&#xff0c;重启电脑、关机再开机该问题依然存在。插入优盘后可以识别到&#xff0c;但无法打开优盘&…

DAC8563芯片参考手册重要内容总结

DAC8563的主要参数&#xff1a; 供电电压&#xff1a;2.7~5.5V分辨率&#xff1a;16bit&#xff0c;双通道通讯接口&#xff1a;3线SPI串行通讯&#xff0c;速率最高至50MHz&#xff0c;支持3.3V和5V单片机&#xff08;有MOSI/CLK/CS&#xff0c;无MISO&#xff09;内部自带2.…

20155220 吴思其 2016-2017《java程序设计》第一周总结

对第一章和第二章的学习 通过了前两章的学习&#xff0c;我了解到了java的由来以及JVM/JRE/JDK三大平台 JDK JDK 是 Java 语言的软件开发工具包。 JDK是整个JAVA的核心&#xff0c;包括了Java运行环境&#xff0c;一堆Java工具&#xff08;javac/java/jdb等&#xff09;和Java基…

手把手教你从0创建STM32串口空闲+DMA数据接收工程

串口通讯是嵌入式系统中最常用的通讯方式。 STM32的串口接收普通的方式是在串口读数据寄存器非空RXNE中断&#xff08;Read data register not empty&#xff09;中1个字节1个字节的接收串口数据&#xff0c;一帧数据的接收完成可以使用结束帧判断&#xff0c;也可以使用定时器…

CSS display属性的值及作用

display 的属性值有&#xff1a;none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|table-header-group|table-footer-group|table-row|table-column-group|table-column|table-cell|table-caption|inherit其中常用的的有none、inline、blo…

TC214B直流电机控制芯片

潘多拉开发板中通过TC214B电机驱动芯片驱动板载直流电机&#xff0c;因此需要先了解TC214B芯片的主要功能及其使用方法。 通过以上资料可以了解到&#xff0c;MCU控制TC214B从而进行直流电机转动方向&#xff0c;方向控制&#xff08;即前进/后退&#xff09;主要是通过控制MCU…

题目1065:输出梯形

AC: #include<iostream> using namespace std; int main() {int h;while(cin>>h){int i,j,k,t;k(h-1)*2;th;for (i0;i<h;i)//h在此处已用&#xff0c;所以用th来代替重用&#xff1b;{ for (j0;j<k;j)cout<<" ";k-2;for (j0;j<t;j)cout&…