算法(数组+链表+排序):这里可不可以是ln <= mt[p][0]?
无意中看到一份高中信息技术的题然后就做了做,其中一问给出的答案是(ln < mt[p][0] or ln == mt[p][0] and st > mt[p][1])
,我觉得当ln == mt[p][0]
的时候,st > mt[p][1]
应该是一定成立的(因为它是从左到右找的,后面找到的波峰的起始点一定大于前面找到的)。可以直接写成ln <= mt[p][0]
大体说明一下这个程序的过程:
- 首先找波峰,找波峰的过程可以分为三部分,找起点、找中间点、找终止点,除此之外还判断它们存不存在。
- 之后就是排序
- 每个波峰用一个大小为3数组arr来表示,arr[0]表示长度,arr[1]表示起始点,arr[2]表示下一个小的波峰记录在数组中下标。
- 每个新找到的波峰都加入到数组mt的末尾。(可以理解为链表的next指针)
- head记录的是链表的头部,即最大波峰记录在数组中的下标。
- 每个新加入的波峰记录(除第一个)都从最大的开始比较,并用q记录前一个波峰记录(当前比自己大的波峰记录),以便于插入新的波峰记录。
- 不段重复上述操作,直到找到所有的波峰并排序。
- 输出结果。
答案: