Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除ArrayList中第一个和最后一个引用之间的重复元素以优化路径_Java_Optimization_Arraylist - Fatal编程技术网

Java 删除ArrayList中第一个和最后一个引用之间的重复元素以优化路径

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)

这是一个机器人项目。我已经用A*找到了两个坐标之间的路径,但我想进一步优化,这样机器人的运动会更平稳。到目前为止,我似乎还没有找到一个能满足我需求的解决方案

我还使用了曼哈顿距离,所以有重复的x和y值的坐标

搜索完成后,我有一个坐标数组列表,如下所示:

[(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语句。我们不是在为您编写代码,所以请继续尝试。快乐编码。