我有一个std :: vector包含一些数字,这些数字没有任何特定的顺序,并且数字之间可能有或没有间隙 – 例如,我可能有{1,2,3,6}或{2,8,4,6}或{1,9,5,2}等.
我想要一个简单的方法来查看这个向量并说“给我最小的数字> = 1,它不会出现在向量中”.所以,
对于上面三个例子,答案分别是4,1和3.
它不是性能关键,列表很短,所以没有任何关于复制列表和排序的问题,例如.
我并没有真正坚持这样做的方法,但我的STL技能严重萎缩,我可以感觉到我要做一些不优雅的事情 – 我很想知道其他人想出了什么.
解决方法
选中的答案使用<为了比较. !=更简单:
int find_gap(std::vector<int> vec) { std::sort(vec.begin(),vec.end()); int next = 1; for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { if (*it != next) return next; ++next; } return next; } find_gap(1,5) = 3 find_gap(2) = 1 find_gap(1,3) = 4
我没有传递对向量的引用,因为a)他说时间无关紧要b)所以我不改变原始向量的顺序.