objective-c - 在 NSMutableArray 中找到一个不靠近任何整数的整数

标签 objective-c algorithm 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 中有一个简单的数学方法可以对此进行排序。我真的不知道我应该如何实现这一目标。非常感谢任何帮助。

最佳答案

让我稍微改一下这个问题。你有积分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 = 0p6 = 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/

相关文章:

ios - 在显示附加到 inputAccessoryView 的 UIMenuController 中隐藏 'select' 、 'selectAll' 、 'paste' ?

c - 在 C 中以困难的方式打印星号

algorithm - 计算 "moving"协方差

python - 我在线性时间内合并两个排序列表的实现 - 有什么可以改进的?

ios - 合并包含 NSDictionary 的 NSArray

iOS:放松回到一连串模态序列中

objective-c - 在哪里提供 NSURL 值?

objective-c - Alpha 使用 UIView animateWithDuration : instead of animating 立即改变

iphone - 如果使用其他 NSMutableArray 初始化,如何更新 NSMutableArray

objective-c - 将一个 NSMutableArray 连接到另一个 NSMutableArray 的末尾