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());
可能不被认为是排序。在一个序列中,如<代码> 1 2×1 /代码>,你认为第二个最小元素是<代码> 1 < /代码>还是<代码> 2 < /代码>?@ JAROD42同意循环从索引2开始,你忽略了第三个元素。ndex 2QUEST声明“我应该在不排序数字的情况下执行此操作”,因此这并不能回答问题
CUOD42和你选择第二元素可能会更好。<代码> NthyEngultmin1 = 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; }