如何找到第三个最小整数?

时间:2015-12-15 07:21:12

标签: c++

我有一个未知大小的数组,想要找到没有排序的第三个最小整数,我该怎么做?

这是我的尝试,但我无法让它发挥作用。

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;
}

2 个答案:

答案 0 :(得分:4)

std::nth_element(arr, arr + 2, arr + size);
return arr[2];

答案 1 :(得分:2)

不要解决您的问题,让我建议一个更好的方法来解决这个问题。您可以使用大小为3的最大堆来执行此操作。算法如下所示:

  • 从数组中的前3个字符创建最大堆。
  • 如果考虑的元素小于堆的顶部元素,则弹出顶部元素并插入此元素。
  • 如果元素大于堆的顶部元素,请转到下一个元素。
  • 完成所有元素后,top元素将成为第三个最小元素。

时间复杂度:O(N)