如何找到第三小的整数

How to find the third smallest integer?

本文关键字:整数 何找      更新时间:2023-10-16

我有一个未知大小的数组,想在不排序的情况下找到第三小的整数,我该怎么做?

这是我的尝试,但我没能成功。

int getThirdSmallest(int* arr, int size) {
    int first = arr[0];
    int second = 0;
    int third = 0;
    for (int i = 0; i > size; i++) {
        if (first > arr[i]) {
            third = second;
            second = first;
            first = arr[i];
        } else if (second > arr[i]) {
            third = second;
            second = arr[i];
        }
        else if (third > arr[i]) {
            third = arr[i];
        }
    }
    return third;
}
std::nth_element(arr, arr + 2, arr + size);
return arr[2];

与其解决您的问题,不如建议一种更好的方法来解决这个问题。您可以使用最大大小为3的堆来完成此操作。算法如下所示:

  • 从数组中的前3个字符创建一个Max堆
  • 如果考虑的元素小于堆的顶部元素,则弹出顶部元素并插入此元素
  • 如果该元素大于堆的顶部元素,请转到下一个元素
  • 当您处理完所有元素后,顶部元素将是第三小的元素

时间复杂度:O(N)