算法(数组+链表+排序):这里可不可以是ln <= mt[p][0]?

算法(数组+链表+排序):这里可不可以是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记录前一个波峰记录(当前比自己大的波峰记录),以便于插入新的波峰记录。
  • 不段重复上述操作,直到找到所有的波峰并排序。
  • 输出结果。

img

img

答案:

img

我觉得没错,它是从左到右查找,确实始终为真。