【发布时间】:2015-12-29 08:18:00
【问题描述】:
假设给定一个包含 n 个整数的列表(该列表不需要已经排序)。删除、更新或插入值后如何检查列表是否已排序(非递增或非递减)?
我能想到的唯一解决这个问题的方法是使用 remove[O(n)],insert[O(n)] 和 update [O(n)] 和 a线性检查以查看其排序是非递减还是非递增。有没有可能更快地解决这个问题?
删除、插入和更新意味着用户将给出一个位置来删除/插入/更新,并且值将被插入、删除或添加到给定的位置。
在输入的任何时候都会有一个查询询问列表处于哪个状态(非增加或非减少)
【问题讨论】:
-
删除不会扭曲排序顺序。添加可以通过二进制搜索来实现,以插入正确的位置以保持排序。更新可以实现为删除/添加。
-
您打算保持容器排序(即在插入/修改后容器应该保持排序),还是只想能够有效地检查容器是否保持排序?
-
“我只是想继续检查列表是否保持排序状态” - 嗯??只需检查上一个和下一个元素...
-
可以进行连续的删除/添加/更新。程序有一个查询输入,如果列表在每个时刻都按非递增或非递减排序,则必须回答。
-
我想你问的是“在任何时候列表都可以处于已排序或未排序状态。此列表上的任何操作都需要根据它现在是否已排序来快速更新状态。”所以所有“保持分类”的建议都不是你想要的。对吗?
标签: algorithm