我有两个数组: -
int[] blueArray = new int[100];
int[] greenArray = new int[100];
greenArray和blueArray包含0到255之间的数字,表示每帧中相应颜色的强度。所以blueArray [0]的蓝色值为frame-1,blueArray [99]的蓝色值为frame-100。类似的排序适用于greenArray。
我想找出青色帧最高的前10帧。所以我正在寻找包含最高蓝+绿总和的前10帧ID。我可能不会使用额外的数据结构,并希望在O(n)时间内排在前10名。
我该如何做到这一点?
答案 0 :(得分:2)
虽然不是很快,但实际上是O(n):
for (j = 0; j < 10; j++)
max = j
for (i = j + 1; i < 10; i++)
if (blueArray[i] + greenArray[i] > blueArray[i] + greenArray[i])
max = i;
swap(blueArray[j], blueArray[max])
swap(greenArray[j], greenArray[max])
答案 1 :(得分:0)
这称为部分排序。 Wikipedia提供了可用算法的精彩概述。你必须同时处理两个数组的事实不应该产生很大的不同,但它会阻止你使用任何现有的实现,所以你可能不得不自己动手。