这把锁从左到右有 � n 个数,组成了一个序列 { � } {a}。 由于 GOD_hj 的记性不好,所以只要将锁设置为输入任意单峰序列即可打开。具体为: � 1 ≤ ⋯ ≤ � � ≥ � � + 1 ≥ ⋯ ≥ � � ( 1 ≤ � ≤ � ) a 1 ≤⋯≤a i ≥a i+1 ≥⋯≥a n (1≤i≤n) GOD_hj 的锁是拨动式的,即拨一下就能换成临近的一个数( 0 0 和 9 9 可以互换)。 求最少拨几下可以开锁。
时间: 2024-04-02 22:31:36 浏览: 133
求两个等长有序序列的中位数_nonewqq_数据结构_
这是一个经典的信封嵌套问题,也可以称为最长不降子序列问题。可以使用动态规划求解,时间复杂度为 O(n^2) 或 O(nlogn)。以下是 O(nlogn) 的解法:
定义一个数组 d,d[i] 表示长度为 i 的最长不降子序列的末尾元素的最小值。初始化 d[1] = a[1],其余为正无穷大。
遍历整个序列,对于每个元素 a[i],在数组 d 中二分查找第一个大于等于 a[i] 的位置,更新 d[j] = a[i],其中 j 为查找到的位置。如果查找到的位置 j 大于当前最长的不降子序列长度 len,则更新 len = j。
最终最长不降子序列的长度为 len,需要拨动的次数为 n - len。
代码如下:
阅读全文