【问题标题】:find longest noncontiguous nondecreasing subsequence in array在数组中找到最长的非连续非递减子序列
【发布时间】:2020-07-06 22:00:26
【问题描述】:

我想证明为什么要在 O(n) 中找到大小为 n 的数组的最长非连续非递减子序列。
“查找”是指知道它的长度,以及相关索引的列表。

Here is a solutionNlogN

Here is the Wikipedia article.

我想说服自己,不能再快了。


这里是部分证明:

假设这可能比O(nlogn) 更快,为简单起见,O(n) 但这适用于比O(nlogn) 更好的任何东西

我们可以将两个排序数组合并成一个排序数组,由O(n1 + n2)中的所有元素组成。

给定一个数组A,然后我们可以在O(n) 中找到其最长的非连续非递减子序列。 如果这个序列小于n/2,那么对于reversed(A),它大于或等于n/2 [我需要证明]

这样,我们可以将数组拆分为已排序的块,每次都在O(n)中,并留下大小为k的余数,也可以在O(k) + O(remainer)中拆分和排序,直到剩下一个元素是O(1)

因此,对数组进行排序需要O(n)

【问题讨论】:

    标签: python arrays algorithm sorting


    【解决方案1】:

    Here is a solution in O(n+klogk), where k is the number of elements which are in an unsorted position.

    借助上述算法,我们可以通过使用上述算法O(n+klogk) 进行排序并同时遍历未排序和已排序数组,找到 k 个元素中的哪些元素(或更少) ) 差异(单次通过,O(n))。

    其余的索引将定义一个排序数组,它也是输入数组的非连续子序列,它具有最大长度,因为根据定义,这些索引是排序的,而其他 k 不是.

    一般来说,这是O(n log n), but in case there is a need to search for a longest non consecutive subsequence, it would make sense to optimize like this, because the problem will probably be such that n

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 2010-09-17
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多