vector<int> minAnd2ndMin(int a[], int n) {
int se = a[0];
int sse = INT_MAX;
for(int i=1;i<n;i++){
if(a[i]<se){
sse=se;
se=a[i];
}
else if(a[i]!=se && a[i]<sse){
sse=a[i];
}
}
if(se!=sse){
return {se,sse};
}
else if(se==sse){
return {-1,-1};
}
}
如果数组是 {1,1,1},我希望它应该返回 {-1,-1}。 此代码返回数组中最小和第二小的元素。
打电话给
minAnd2ndMin(data, 3); // data = {1,1,1}
以下条件将始终为假:
a[i]<se // 1 < 1
a[i]!=se // 1 != 1
这意味着当您退出 for 循环时,
sse
仍然是 INT_MAX
,se!=sse
为 true,并且您的函数返回 {se,sse}
({1, INT_MAX}
)。
你想要的是利用
<algorithm>
,特别是std::partial_sort
:
#include <algorithm>
#include <vector>
std::vector<int> minAnd2ndMin(int a[], int n)
{
using std::begin, std::end;
std::partial_sort(a, a+2, a+n);
return {a[0], a[1]};
}