Java 删除ArrayList中第一个和最后一个引用之间的重复元素以优化路径
这是一个机器人项目。我已经用A*找到了两个坐标之间的路径,但我想进一步优化,这样机器人的运动会更平稳。到目前为止,我似乎还没有找到一个能满足我需求的解决方案 我还使用了曼哈顿距离,所以有重复的x和y值的坐标 搜索完成后,我有一个坐标数组列表,如下所示:Java 删除ArrayList中第一个和最后一个引用之间的重复元素以优化路径,java,optimization,arraylist,Java,Optimization,Arraylist,这是一个机器人项目。我已经用A*找到了两个坐标之间的路径,但我想进一步优化,这样机器人的运动会更平稳。到目前为止,我似乎还没有找到一个能满足我需求的解决方案 我还使用了曼哈顿距离,所以有重复的x和y值的坐标 搜索完成后,我有一个坐标数组列表,如下所示: [(0,0),(0,1),(0,2),(0,3),(1,3),(2,3),(3,3)] 我想让函数返回一个删除了中间元素的ArrayList,这样当路径被跟随时,移动会更加平滑 我希望优化后的结果是这样的: [(0,0),(0,3),(1,3)
[(0,0),(0,1),(0,2),(0,3),(1,3),(2,3),(3,3)]
我想让函数返回一个删除了中间元素的ArrayList,这样当路径被跟随时,移动会更加平滑
我希望优化后的结果是这样的:
[(0,0),(0,3),(1,3),(3,3)]
我也不能使用Java 1.8,因为robot最多只支持1.7。我故意不编写Java代码:
for each element of the input list
copy it to the output list
if there are at least 3 elements in the output list
if the last 3 elements are collinear
remove the middle one
对于共线测试,请使用或TFG。因此,您基本上要做的是找到只有一个坐标发生变化的任何子序列。然后,您可以删除所有不是子序列开始或结束的元素。注意:
O(n)
复杂度是一个更好的解决方案,但无论如何,在实现它时,您可能会遇到困难。您希望在列表中保留(1,3)(而不是(2,3))?这将是一个循环(至少一个)和一些if语句。我们不是在为您编写代码,所以请继续尝试。快乐编码。