如何找到第三小的整数
How to find the third smallest integer?
我有一个未知大小的数组,想在不排序的情况下找到第三小的整数,我该怎么做?
这是我的尝试,但我没能成功。
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)
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何找出在两个整数的乘积中设置了多少位(等于 1)
- 找出堆栈数组中的下一个整数是否相同
- 找出一个特定整数有多少个二进制数字
- 给定一个整数数组,找出两个数字,使它们加起来等于一个特定的目标数
- 类模板采用整数时找不到成员声明