c++ - 如何找到第二小的向量?
问题描述
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;
我想在向量中找到第二小的用户输入。我创建了一个代码来找到最小的。但我不知道如何找到第二小的。我应该这样做而不对数字进行排序。有人可以告诉我一个方法吗?
解决方案
您可以在O(n)
运行时复杂性中做到这一点。排序需要O(n log n)
时间复杂度才能运行。在这种情况下,您只需要两个变量即可找到第二个最小值。
#include <vector>
#include <stdio.h>
#include <iostream>
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();
int minimum = INT_MAX, secondmin = INT_MAX;
for (i=0; i<sequence.size();++i){
if (minimum > sequence[i]) {
secondmin = minimum;
minimum = sequence[i];
}else if ( secondmin > sequence[i] ) {
secondmin = sequence[i];
}
}
cout << "answer is "<< secondmin << endl;
}
输出
sequence: 1
2
3
4
end
answer is 2
推荐阅读
- node.js - angular 2 app-root 运行时未加载
- java - Spark - 使用 Java 从 Kafka (Confluent JDBC) 读取 AVRO 数据
- java - 您可以使用 int 数组作为对象参数吗?
- typescript - 组织一组枚举
- tensorflow - 在 tf.keras Tensorboard (TF2-beta) 中未显示渐变
- java - Java 中 Deflate 函数的等效 Inflate
- excel-formula - Vlookup If Match 与数组的组合
- c# - C# NUnit 测试
- keycloak - 如何从 Keycloak admin cli v6.0.1 调用 testLDAPConnection 方法?
- r - 为什么当我减去时我的代码会删除行?