【发布时间】:2022-01-22 15:02:14
【问题描述】:
我想从我的数组中删除行,以便我的结果是一个包含具有唯一第一个和最后一个元素的行的数组。如果两(或更多)行具有相同的第一个和最后一个值,我想保留元素计数最低的行。
假设我有以下数组:
$var = [
[1, 2, 3],
[1, 3],
[1, 2, 4, 3],
[1, 3, 4]
];
我想要的是从$var 中删除所有数组,它们的第一个和最后一个元素与$var 中的另一个数组相同,但有更多元素。
由于前三行均以1 开头并以3 结尾,因此应仅保留包含[1, 3] 的第二行。
第四行 ([1, 3, 4]) 唯一地以1 开头并以4 结尾,因此也应保留。
输出应该是:
[
[1, 3],
[1, 3, 4]
]
我正在寻找最有效的方法,无论是在内存方面还是在时间方面。 $var 最多可以有 100 个数组,每个单独的数组最多可以有 10 个元素。我曾想过在所有两个元素之间使用某种比较 (for(i=0;...) for(j=i+1;...) complexCompareFunction();),但我认为这不是很有效。
【问题讨论】:
-
你有你想要做的事情的用例吗?可能有更好的方法来实现它......
-
我正在生成连接两个用户选择位置的公共交通线路的所有组合。从生成的行组合数组(在这种情况下为
$var),我想删除那些使用额外行的组合。那么,如果可以用行(1, 3)到达第二点,为什么还要显示(1, 2, 3)?这里2是多余的,不用它也能到达目的地。 -
也许去1,2,3会比1,3(因为你只能乘公共汽车直接去)花费更少的时间(因为你坐火车)。我们可以重构这个问题:有一个以站为节点、以连接为边的图。对于每两个节点 n,m,您现在搜索以 n 开头并以 m 结尾的最短路径。关于这个主题有大量的参考资料。
-
好吧,如果到达目的地的唯一途径是乘坐 3 号线,那么既然您必须等待 3 号线,为什么还要费心乘坐 2 号线呢?您只需更改线路并支付额外的车票即可到达相同的目的地。还是我错过了什么?这个任务只是整个算法的一小部分,它会删除任何与另一个相似或有一些额外线路的生成路线。我没有使用最短路径,因为我将通过取决于用户何时查询我的应用程序的旅行时间来“测量”我的路径。因此,一条距离比另一条更短的路径不一定更好。
-
使用 Djikstra 最佳第一路径或 A* 或类似算法。
标签: php arrays comparison filtering grouping