我有一个 NSMutableArray,它有 5 个初始设置为零的值。它包含屏幕上元素的 x 坐标,每 1/60 秒更新一次。每个项目的位置都在不断变化。屏幕上最多有 5 个项目,任何时候最少有 1 个。
数组中的每一项都在 0 - 480(iphone 屏幕的高度)范围内。给定时间的示例数组为:
{123,450,0,0,0}
然后可能会变成:
{150,320,90,0,0}
我需要一个快速的方法来找到一个不靠近数组中任何位置的位置。这可以是不在每个值周围的设定范围内的位置(例如,该值不在数组中任何项目的 50 以内)或距离它任一侧最远的位置。
显然,如果无法在特定范围内找到位置,则应选择最佳解决方案。
它需要快速,因为要将新项目添加到屏幕,因此选择新位置的任何延迟都会减慢游戏行情 - 因此 while 循环不是可取的。
希望 objective-c 中有一个简单的数学方法可以对此进行排序。我真的不知道我应该如何实现这一目标。非常感谢任何帮助。
最佳答案
让我稍微改一下这个问题。你有积分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
在右侧。然后制作一个长度减一的新数组,给出连续的差异,例如{p1-p0, p2-p1, ..., p6-p5}
其中 p0 = 0
和 p6 = 480
.最后,得到这个新数组最大值的索引,称之为i
, 并返回最优位置 p_i + (p(i+1)-p_i)/2
.
例子:
输入:{150,320,90,0,0}
重新排列为 {0 , 0 , 0 , 90 , 150 , 320 , 480}
差异数组{0 , 0 , 90 , 60 , 170 , 160}
索引最大值 4
答案是150 + (320-150)/2
关于objective-c - 在 NSMutableArray 中找到一个不靠近任何整数的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7731835/