C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのセルフクロッシング


n個の数の配列xがあるとします。ポイント(0,0)から開始し、x [0]単位を北方向に移動し、次にx [1]単位を西方向に、x [2]単位を南方向に、x[3]単位を東方向に移動します。方向など。つまり、移動するたびに、方向が反時計回りに変わります。パスがそれ自体と交差するかどうかを判断するには、O(1)の余分なスペースを使用したワンパスアルゴリズムを考案する必要があります。

したがって、配列が-[3,4,2,5]

のような場合

C++でのセルフクロッシング

答えは本当です。

これを解決するには、次の手順に従います-

  • xのインデックス4に0を挿入します

  • n:=xのサイズ、i:=4

  • ix [i-2]のときに何も初期化しない場合は、iを1つ増やします-

    • 何もしない

  • iがnと同じ場合、falseを返します

  • x [i]> =x [i-2]-x [i-4]の場合、

    • x [i-1] =x [i-1]-x [i-3]

  • iを1増やす場合、i

    • 何もしない

  • iがnと同じでない場合はtrueを返します

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool isSelfCrossing(vector<int>& x) {
      x.insert(x.begin(), 4, 0);
      int n = x.size();
      int i = 4;
      for(; i < n && x[i] > x[ i - 2];i++);
      if(i == n) return false;
      if (x[i] >= x[i - 2] - x[i - 4]){
         x[i - 1] -= x[i - 3];
      }
      for (i++; i < n && x[i] < x[i - 2]; i++);
      return i != n;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,4,2,5};
   cout << (ob.isSelfCrossing(v));
}

入力

{3,4,2,5}

出力

1

  1. Linux上のc++のトップIDEは何ですか?

    大きなプロジェクトは、単なるテキストエディタでは管理が困難です。このような場合にIDEを使用すると、生産性が向上し、フラストレーションが軽減される可能性があります。 IDEにはさまざまな種類があり、ニーズに合ったものを選択する必要があります。 Linuxに最適なC/C++IDEのリストは次のとおりです。 C /C++開発用のNetbeans- Netbeansは、C /C++および他の多くのプログラミング言語向けの無料のオープンソースで人気のあるクロスプラットフォームIDEです。コミュニティで開発されたプラグインを使用して完全に拡張可能です。 Eclipse CDT(C / C ++

  2. Window上のc++のトップIDEは何ですか?

    大きなプロジェクトは、単なるテキストエディタでは管理が困難です。このような場合にIDEを使用すると、生産性が向上し、フラストレーションが軽減される可能性があります。 IDEにはさまざまな種類があり、ニーズに合ったものを選択する必要があります。これがWindowに最適なC/C++IDEのリストです。 Visual Studio − Microsoftが開発したIDEです。このIDEは、Windows上でC ++のプログラムを構築、開発、およびプロファイリングするためのクラス最高のツールを備えています。 Visual Studioには、多数のプラグインを備えた巨大なプラグインストアもありま