C++ 如何找到向量的次最小值? 无符号整数i; int-min; int-num; 矢量序列; cout>num; 顺序。推回(num); } sequence.pop_back(); 最小值=序列。在(0)处; 对于(i=0;i

C++ 如何找到向量的次最小值? 无符号整数i; int-min; int-num; 矢量序列; cout>num; 顺序。推回(num); } sequence.pop_back(); 最小值=序列。在(0)处; 对于(i=0;i,c++,C++,您可以在O(n)运行时复杂度中进行排序。排序需要O(n log n)运行时间复杂度。在这种情况下,您只需要两个变量就可以找到第二个最小值 unsigned int i; int min; int num; vector<int>sequence; cout << "sequence: "; for (i=0; cin.good(); ++i){ cin >> num; sequence.push_back(num); } sequ

您可以在
O(n)
运行时复杂度中进行排序。排序需要
O(n log n)
运行时间复杂度。在这种情况下,您只需要两个变量就可以找到第二个最小值

unsigned int i;
int min;
int num;

vector<int>sequence;

cout << "sequence: ";
for (i=0; cin.good(); ++i){
      cin >> num;
      sequence.push_back(num);
}

sequence.pop_back();

min = sequence.at(0);
for (i=0; i<sequence.size();++i){
    if (sequence.at(i)< min){
        min=sequence.at(i);
    }
}

cout << min << endl;

一个简单的方法可以如下所示

sequence: 1
2
3
4
end
answer is 2
或者您可以编写自己的算法,例如

min1 = 0, min2 = 1

解决方案:

second minimum = 1
#包括
#包括
#包括
使用名称空间std;
int main()
{
无符号整数i;
int-min;
int-num;
矢量序列;
cout>num;
顺序。推回(num);
}
sequence.pop_back();
排序(sequence.begin(),sequence.end());

CUOD42和你选择第二元素可能会更好。<代码> NthyEngult
可能不被认为是排序。在一个序列中,如<代码> 1 2×1 /代码>,你认为第二个最小元素是<代码> 1 < /代码>还是<代码> 2 < /代码>?@ JAROD42同意循环从索引2开始,你忽略了第三个元素。ndex 2QUEST声明“我应该在不排序数字的情况下执行此操作”,因此这并不能回答问题
min1 = 0, min2 = 1
#include <iostream>
#include <utility>
#include <vector>
#include <iterator>
#include <algorithm>
#include <numeric>

template <typename ForwardIterator>
ForwardIterator second_min( ForwardIterator first, ForwardIterator last )
{
    ForwardIterator first_minimum  = first;
    ForwardIterator second_minimum = last;

    if ( first != last )
    {
        while ( ++first != last )
        {
            if ( *first < *first_minimum )
            {
                second_minimum = first_minimum;
                first_minimum  = first;
            }
            else if ( second_minimum == last || *first < *second_minimum )
            {
                second_minimum = first;
            }
        }
    }

    return second_minimum;
}

int main() 
{
    std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    auto minimum = second_min( std::begin( v ), std::end( v ) );

    if ( minimum != std::end( v ) )
    {
        std::cout << "second minimum = " << *minimum << '\n';
    }

    return 0;
}
second minimum = 1
#include <iostream>
#include <algorithm>
#include<vector>

using namespace std;

int main()
{
    unsigned int i;
    int min;
    int num;

    vector<int>sequence;

    cout << "sequence: ";
    for (i = 0; cin.good(); ++i) {
        cin >> num;
        sequence.push_back(num);
    }
    sequence.pop_back();
    sort(sequence.begin(), sequence.end());

    cout << " Second smallest : "<<sequence[1] << endl;
}