你有一个包含n个JPEG图像的阵列A,其中一些是相同的。
您可以检查两个对象是否相等,但您无法以任何其他方式对它们进行比较 - 即。你可以检查A [i] == A [j]和A [i]!= A [j],但比较如A [i]< A [j]没有意义。
如果严格超过一半的元素彼此相等,则数组A被认为具有多数元素。
使用分而治之来提出一个O(n logn)算法来确定A是否具有多数元素。
............................................... .................................
我的解决方案: 我通过将图像数组分成两半来解决这个问题,直到有大小为1或2的数组。
如果数组的大小为1,那么我们返回该数组中存在的元素,如果它的大小为2,那么我们将比较数组的元素。如果它们相同,那么我们返回该元素,否则它不会返回。
当我们递归地向上移动树时,我们对返回的元素执行相同的操作,直到只返回一个元素为止。
我会更容易用一个例子来解释
假设数组是ABABAABA
第1步我们分成两半
[ABAB] [AABA] - > [AB] [AB] [AA] [BA]
现在,[AB]什么都不返回(因为A与B不同)
[AB] returns nothing
[AA] returns A
[BA] returns nothing
因此,唯一返回的元素是A,它是多数元素。 现在,我的问题是你会发现上面的算法不适用于AAAAABBB之类的许多阵列,但我认为这不起作用只是因为A的排序和B的阵列改组会使问题消失。请告诉我,我是对的吗?
如果我的算法完全错了,那么请给出一个解决方案。