gpt4 book ai didi

c++ - 没有排序的第三大区域

转载 作者:太空狗 更新时间:2023-10-29 20:56:08 25 4
gpt4 key购买 nike

我正在上一门编程入门类(class),我试图在圆数组中找到第三大区域,然后返回可以在不排序的情况下找到该圆的位置的索引,但遇到了一些麻烦。

输入

Circle [0] 157/50
Circle [1] 314/25
Circle [2] 1413/50
Circle [3] 1256/25
Circle [4] 152/7

预期输出

2

实际输出

4

如果我错了请纠正我,但我认为我为 largestsecondlargestthirdlargest 分配了错误的值?为什么返回 4?这是我到目前为止所拥有的,感谢您的帮助。 ^_^

int getThirdLargestArea(Circle** arr, int size) {
Circle largest = *arr[0];
Circle secondlargest = *arr[size - 1];
Circle thirdlargest = secondlargest;

int index = 0;

for (int i = 1; i < size; i++) {
if (largest.getArea() > arr[i]->getArea()) {
thirdlargest = secondlargest;
secondlargest = largest;
largest = *arr[i];
index = i;
}

else if (secondlargest.getArea() > arr[i]->getArea()) {
thirdlargest = secondlargest;
secondlargest = *arr[i];
index = i;

}

else if (thirdlargest.getArea() > arr[i]->getArea()) {
thirdlargest = *arr[i];
index = i;
}
}

return index;
}

最佳答案

首先,您应该在代码中的三个位置将> 替换为<。例如,这里:if (largest.getArea() > arr[i]->getArea()) 如果第 i 个元素的面积大于你目前最大的区域。此外,您应该记住第一个、第二个和第三个圆圈索引,而不是圆圈本身。你总是用 i 的值更新 index 但它只在最后一个 else block 中是正确的。如果您记得索引而不是圆圈,您将返回 thirdLargestIdx

您还应该注意最大、第二大和第三大变量的初始值。您不应该假设您选择的圆圈大小的任何特定顺序。

为了完整起见,有一个 O(n) 算法用于查找数组中的第 k 个最大元素:https://en.wikipedia.org/wiki/Median_of_medians

关于c++ - 没有排序的第三大区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com