最長パスは、ほぼ確実に外側の 2 つの頂点の間です。また、ほぼ確実に、サイクル内のすべての頂点をカバーする必要があります。
したがって、DFS を使用して、O(N) のサイクルをマップします。次に、現在のサイクル配置の長さを計算します。その長さに、サイクルの最初のポイントから外側までの距離と、最後のポイントから外側までの距離を追加します。これにより、サイクルの長さとは別に保存する実際のパスの長さが得られます。
最初のポイントと最後のポイントのインデックスを増やし (O(1) で実行できます)、最初のポイントから最後のポイントに向かうエッジの長さを削除します。次に、外側の長さを再度追加します。すべての頂点をカバーするまで繰り返します。パスの長さを実際に毎回再計算するのではなく、保存して更新するため ((O(N^2)) が必要になるため、O(N) で実行できます。
これにより、O(N) でサイクルをたどることができます。ただし、正確なアルゴリズムではありません。そのためには、代わりに一部の i,j に対して first+i や last-j を使用してはならないことを確認する必要があります。それを完全にチェックするには、本質的にO(N^2)が必要です。
ただし、これらのエッジケースが可能な場所を巧みに判断することにより、約 O(N log N) でそれを実行しようとしている可能性があります。正確な線形アルゴリズムが可能であるとは思えません。