如何检查矢量元素是否连续有序

How can I check if vector elements are in order consecutively?

本文关键字:是否 元素 连续 何检查 检查      更新时间:2023-10-16

我需要检查向量中的元素是否连续有序?

for(i=1; i<=K; i++)
    if(v[i]=v[i+1]-1)

如果语句为真,我想返回最大的整数。

例 4 5 6 7

7

有一个算法: std::is_sorted

if (std::is_sorted(v.begin(), v.end()) {
    return v.back(); // the largest element would be the last one
}
else {
    // ?? 
}

我需要检查我的向量中的元素是否有序

使用 C++11 的std::is_sorted算法:

#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
    std::vector<int> v1 { 4, 5, 7, 6 };
    std::vector<int> v2 { 4, 5, 6, 7 };
    using std::begin;
    using std::end;
    std::cout << std::is_sorted(begin(v1), end(v1)) << "n";
    std::cout << std::is_sorted(begin(v2), end(v2)) << "n";
}

如果语句为真,我想返回最大的整数。

这是std::max_element的工作:

#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
    std::vector<int> v1 { 4, 5, 7, 6 };
    std::vector<int> v2 { 4, 5, 6, 7 };
    using std::begin;
    using std::end;
    std::cout << *std::max_element(begin(v1), end(v1)) << "n";
    std::cout << *std::max_element(begin(v2), end(v2)) << "n";
}

请注意,std::max_element不需要对其输入进行排序。

或者,如果它已经排序了,只需使用 v1.back() .

我会使用:

is_sorted(begin(v), end(v));

如果序列未排序,则使用:

max_element(begin(v), end(v));

以获得最大值。

使用 stl 的 std::is_sorted 算法。

bool test(vector<int> v) {
    for(int i = 0; i < v.size()-1; i++)
        if(v[i] > v[i+1])
            return false;
    return true;
}

如果向量是有序的,那么最大的是最后一个,即v[v.size()-1].

从这个问题来看,你似乎对向量元素是否是相交整数感兴趣。如果是这种情况,您可以使用标志来指示条件是否成立并执行单次迭代:

bool consecutive = false;
for (int i = 1; i < v.size(); ++i) {
  if (v[i] != v[i - 1] + 1) {
    consecutive = false;
    break;
  }
}
if (consecutive) {
   cout << v.back() << endl; // the last element is the biggest.
}

但是,您的问题标题表明您有兴趣检查向量是否已排序。如果是这种情况,您可以使用自 c++11 以来存在的内置函数 std::is_sorted。

第二个元素开始遍历向量并保持标志变量初始化为 0,对于每次迭代,检查以下条件:-

if(v[i]<v[i-1])

如果此条件为 true,则将标志设置为 1 并脱离循环。控件移出循环后,检查 flag 的值。如果标志为 1,则向量元素不按顺序排列。否则,如果标志为 0,则向量元素是有序的,您必须打印最大的元素 v[v.size()-1]。

相关文章: