在NSMutableArray中找到一个不接近任何整数的整数



我有一个NSMutableArray,它有5个值最初设置为零。它包含屏幕上元素的x坐标,每1/60秒更新一次。每个项目的位置都在不断变化。在任何时候,屏幕上最多显示5个项目,最少显示1个项目。

数组中的每个项目将在0 - 480 (iphone屏幕的高度)的范围内。给定时间的数组示例如下:

{123,450,0,0,0}

可能会变成:

{150,320,90,0,0}

我需要一个快速的方式来找到一个位置,不是在数组中的任何位置附近。这个位置可以是不在每个值周围的设置范围内的位置(例如,该值不在数组中任何项的50范围内),也可以是与它的任何一边距离最大的位置。

显然,如果无法在一定范围内找到位置,则应选择最佳解决方案。

它需要快速,因为一个新项目正在被添加到屏幕上,所以选择一个新位置的任何延迟都会减慢游戏计时器-所以while循环不可取。

希望objective-c中有一个简单的数学方法可以排序。我真不知道该如何做到这一点。任何帮助MUCH非常感谢。

让我稍微改变一下这个问题。你有p1,p2,p3,p4,p5点使得

0 <= p_i <= 480

你想找到一个点x使得

0 <= x <= 480
使函数最大化的

min_{x} ( |p1-x| + |p2-x| + |p3-x| + |p4-x| + |p5-x| )

如果这是你的目标(我不清楚它是或应该是),那么你可以通过检查以下哪个潜在的x值使距离最大化来解决这个问题:

0 , p1/2 , p1 + (p2-p1)/2 , p2 + (p3-p2)/2 , ... , p5 + (480-p5)/2

假定0 <= p1 <= p2 <= p3 <= p4 <= p5 <= 480。两个差项中较大的就是你应该选择的答案。

例如,对于

{123,450,0,0,0}

答案是123 + (450-123)/2

{150,320,90,0,0} 

答案是150 + (320-150)/2

要在Objective-C中编写此代码,您需要有一个返回数组中最大条目的索引的函数。将输入设为p1,p2,...,p5。将这些按递增顺序排序,在左侧附加0,在右侧附加480。然后创建一个长度减少1的新数组,给出连续的差异,例如{p1-p0, p2-p1, ..., p6-p5},其中p0 = 0p6 = 480。最后,获取这个新数组的最大值的索引,称其为i,并返回最优位置p_i + (p(i+1)-p_i)/2

的例子:

input: {150,320,90,0,0}

rearrange to {0 , 0 , 0 , 90 , 150 , 320 , 480}

差分数组{0 , 0 , 90 , 60 , 170 , 160}

索引4的最大值

答案是150 + (320-150)/2

我不认为有一个Objective-C对象会为你做这些——你实际上必须做一些编程。

首先想到的是某种树,但不是简单的b树或诸如此类的树。也许是笛卡尔树,但我现在还不知道如何应用它。

或者你可以直接使用暴力-将值按顺序排列并扫描列表以找到最大的差距。

最新更新