当前位置:  开发笔记 > 编程语言 > 正文

找出数字序列的差距

如何解决《找出数字序列的差距》经验,为你挑选了2个好方法。

我有一个std :: vector包含一些数字,这些数字没有任何特定的顺序,并且数字之间可能有或没有间隙 - 例如,我可能有{1,2,3,6}或{2 ,8,4,6}或{1,9,5,2}等.

我想要一个简单的方法来查看这个向量并说"给我最低数字> = 1,它不会出现在向量中".所以,

对于上面三个例子,答案分别是4,1和3.

它不是性能关键,列表很短,所以没有任何关于复制列表和排序的问题,例如.

我并没有真正坚持这样做的方法,但我的STL技能严重萎缩,我可以感觉到我要做一些不优雅的事情 - 我很想知道其他人想出了什么.



1> Drew Dormann..:

您正在寻找的标准算法是std :: adjacent_find.

这是一个解决方案,它也使用lambda来使谓词干净:

int first_gap( std::vector vec )
{
  // Handle the special case of an empty vector.  Return 1.
  if( vec.empty() )
    return 1;

  // Sort the vector
  std::sort( vec.begin(), vec.end() );

  // Find the first adjacent pair that differ by more than 1.
  auto i = std::adjacent_find( vec.begin(), vec.end(), [](int l, int r){return l+1



2> jmucchiello..:

选中的答案使用<进行比较.!=更简单:

int find_gap(std::vector vec) {
    std::sort(vec.begin(), vec.end());
    int next = 1;
    for (std::vector::iterator it = vec.begin(); it != vec.end(); ++it) {
        if (*it != next) return next;
       ++next;
    }
    return next;
}

find_gap(1,2,4,5) = 3
find_gap(2) = 1
find_gap(1,2,3) = 4

我没有传递对向量的引用,因为a)他说时间无关紧要b)所以我不改变原始向量的顺序.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有