给定一组N个数字,我应该找到奇数的数字。现在N是一个奇数,确定'奇数一个'的方法是将给定的数字组合在一起,最后你将留下一个数字,即'奇数一个'。
数字根据它们之间的距离进行配对。首先,从给定的一组数字中挑选两个距离最小的数字并将它们配对在一起。这使我们在集合中留下了N-2个数字。重复该过程,直到只剩下1个数字。
示例:{1,4,3}
1到3之间的距离是2,3到4之间的距离只有1.所以3和4是配对的,这使我们失去了1个,使它成为奇怪的人。
到目前为止,我所能想到的是对给定列表进行排序,找出每个数字之间的差异并消除对,从它们之间距离最小的对开始。这最终会让我感到“奇怪的一个”,但问题必须通过复杂度小于O(N ^ 2)的算法来解决。一些正确方向的帮助将不胜感激。谢谢
又一个例子:{1,3,4,6,10}
对差异最小3,4对消除对 - > {} 1,6,10 具有最小差异的对6,10消除对 - > {1}是奇怪的
另一个例子{2,4,1,10,8,9,6}
与最小差异(1,2)(8,9)和(9,10)配对。消除(1,2)和(8,9)或(10,9)无关紧要(类似的距离结果可以是任何一种方式;不可预测的)让pick(8,9) - > {4,10,6}
接下来消除(4,6) - > {10}是奇怪的 注意:本来可以选择(9,10)而不是(8,9)。
我希望这可以解决问题
答案 0 :(得分:2)
一种可能的O(nlogn)解决方案如下: