如果se(最小元素)== sse(第二小元素),为什么它会给出一些随机输出?

问题描述 投票:0回答:1
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}。 此代码返回数组中最小和第二小的元素。

c++ arrays vector arraylist data-structures
1个回答
0
投票

打电话给

 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]};
}
© www.soinside.com 2019 - 2024. All rights reserved.