C++で指定された合計ですべてのトリプレットを印刷します
この問題では、一意の整数の配列と合計が与えられます。そして、同じ合計を形成できるトリプレットを見つける必要があります。
問題を解決するために例を見てみましょう-
Input : array = {0 , 2 , -1 , 1, -2} Sum = 1 Output : 1 2 -2 0 2 -1
この問題を解決するために、合計を提供するすべてのトリプレットを見つけます。簡単なアプローチは、3つのループを使用して要素の合計を見つけ、適切なトリプレットを返すことです。
例
#include <iostream> using namespace std; void Triplets(int arr[], int n, int sum){ for (int i = 0; i < n - 2; i++) { for (int j = i + 1; j < n - 1; j++) { for (int k = j + 1; k < n; k++) { if (arr[i] + arr[j] + arr[k] == sum) { cout<<arr[i]<<"\t"<<arr[j]<<"\t"<<arr[k]<<endl; } } } } } // Driver code int main(){ int arr[] = { 0 , 2 , -1 , 1, -2 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The Triplets are : \n"; Triplets(arr, n, 1); return 0; }
出力
トリプレットは-
0 2 -1 2 1 -2
ただし、このアプローチは時間計算量がo(n 3 になるため、効率的ではありません。 )3つのループを実行するため。そのため、他の手法を使用して、この問題を効果的に解決します。
1つの方法は、ハッシュを使用することです。この方法では、のすべての要素のペアを見つけて、それらが互いに補完し合うようにします。つまり、値xの要素の場合、要素-xが必要です。
これにより、コードの時間計算量が削減されます。
例
#include <bits/stdc++.h> using namespace std; void Triplets(int arr[], int n, int sum{ for (int i = 0; i < n - 1; i++) { unordered_set<int> triplet; for (int j = i + 1; j < n; j++) { int third = sum - (arr[i] + arr[j]); if (triplet.find(third) != triplet.end()) cout<<third<<"\t"<<arr[i]<<"\t"<<arr[j]<<endl; else triplet.insert(arr[j]); } } } int main(){ int arr[] = { 0 , 2 , -1 , 1, -2 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The Triplets are : \n"; Triplets(arr, n, 1); return 0; }
出力
トリプレットは-
0 2 -1 2 1 -2
この方法は、配列を並べ替えることでより効果的になり、コードのスペースの複雑さが軽減されます。
-
特定のソースから宛先までのすべてのパスをC++で出力します
この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。
-
C++で指定された値になるすべての一意のトリプレット
ここで、1つの興味深い問題が発生します。いくつかの要素を持つ配列があります。 1つの合計値が与えられます。私たちのタスクは、配列からトリプレットを見つけることであり、その合計は指定された合計と同じです。配列が{4、8、63、21、24、3、6、1、0}であり、合計値がS =18であると仮定します。したがって、トリプレットは{4、6、8}になります。複数のトリプレットが存在する場合は、それらすべてが表示されます。 アルゴリズム getTriplets(arr、n、sum)- トリプレットを格納するための1つの配列の定義を開始します。たとえば、trip_arrは、一意のトリプレットを格納するため