int
类型,范围为[INT_MIN, INT_MAX]
。现在,给定一个std::vector<int>
(无重复项)或std::unordered_set<int>
,其大小可以为40、400、4000等,但不要太大,如何有效地生成一个保证不在给定数字中的数字?如果没有溢出的担忧,那么我可以将所有非零数乘在一起,并加上1的积。 但是这样会有问题,对手测试用例可能会包含INT_MAX
。我更喜欢简单而非随机的方法。有吗?谢谢!更新:为消除歧义,假设一个未排序的std::vector<int>
,其中保证没有重复项。因此,我想知道是否有比O(n log(n))更好的方法。另请注意,测试用例可能包含INT_MIN
和INT_MAX
。
O(n log(n))
的时间复杂度内完成,不确定是否能够得到更高效的算法。 - 463035818_is_not_a_numberO(log(n))
的时间复杂度内对一个向量进行排序,那你肯定会变得非常富有。 - Walter