【发布时间】:2020-05-23 11:29:40
【问题描述】:
我很难找到 2 个最小数字。我得到一个错误的输出。
例子:
- 输入:
{-1, 2, 5, 3, 8, -1, 3, 5, 0} - 输出:
{-1, -1} - 正确答案:
{-1, 2}
我认为unique 存在问题,因为它不会删除所有相同的数字。
有更好的方法吗?
以下是我的代码:
#include <iostream>
#include <vector>
#include <algorithm>
void input(std::vector<int> &vec) {
int num;
std::cin >> num;
if (num == 0){
return;
}
vec.push_back(num);
return input(vec);
}
int main() {
std::vector<int> vec;
input(vec);
unique(vec.begin(), vec.end()); // It doesnt work correctly
std::vector<int>::iterator it = min_element(vec.begin(), vec.end());
std::cout << "\n" << *it << " ";
vec.erase(it);
it = min_element(vec.begin(), vec.end());
std::cout << *it << " ";
return 0;
}
【问题讨论】:
-
std::unique仅在它们连续时删除重复项。这里一个简单的for循环可以找到第二个最小值 -
体面的文档清楚地说明了你错过了什么。例如,cppreference:“从每个等效元素的连续组中删除除第一个元素之外的所有元素”。要使唯一元素连续,必须首先对范围进行排序。
-
我不明白正确答案应该是
{-1, 2}, (-1