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

特定の製品とのペアがC++のリンクリストに存在するかどうかを確認します


一連の要素があります。そして、積K。タスクは、リンクリストにKと同じ積の2つの数字が存在するかどうかを確認することです。2つの数字がある場合はそれらを印刷し、3つ以上の数字がある場合はそれらのいずれかを印刷します。 。リンクリストがこの{2、4、8、12、15}のようで、k値が16であるとすると、(2、8)

が返されます。

ハッシュ手法を使用してこれを解決します。 1つのハッシュテーブルを取得し、すべての要素を0としてマークします。リンクリストに存在する場合は、ハッシュテーブルですべての要素を1として繰り返しマークします。次に、リンクリストのトラバースを開始し、指定された製品が現在の要素で割り切れるかどうかを確認します。はいの場合、リンクリストの(K /現在の要素)がハッシュテーブルに存在するかどうかを確認します。

#include <unordered_set>
#define MAX 100000
using namespace std;
class Node {
   public:
   int data;
   Node* next;
};
void append(struct Node** start, int key) {
   Node* new_node = new Node;
   new_node->data = key;
   new_node->next = (*start);
   (*start) = new_node;
}
bool isPairPresent(Node* start, int K) {
   unordered_set<int> s;
   Node* p = start;
   while (p != NULL) {
      int current = p->data;
      if ((K % current == 0) && (s.find(K / current) != s.end())) {
         cout << current << " " << K / current;
         return true;
      }
      s.insert(p->data);
      p = p->next;
   }
   return false;
}
int main() {
   Node* start = NULL;
   int arr[] = {2, 4, 8, 12, 15};
   int n = sizeof(arr)/sizeof(arr[0]);
   for(int i = 0; i<n; i++){
      append(&start, arr[i]);
   }
   if (isPairPresent(start, 16) == false)
   cout << "NO PAIR EXIST";
}

出力

2 8

  1. 与えられたグラフにハミルトン閉路または経路が存在するかどうかをチェックするC++プログラム

    ハミルトン閉路は、ハミルトン経路の最後の頂点から最初の頂点までのエッジ(グラフ内)があるようなハミルトン経路です。無向グラフにあるのは、グラフの各頂点に1回だけアクセスするパスです。 機能と目的: Begin    1.function isSafe() is used to check for whether it is adjacent to the previously added vertex and already not added.    2. function hamiltonianCycle() solves the hamiltoni

  2. 指定された製品のサブ配列がPythonの配列に存在するかどうかを確認します

    numsという配列があり、これに正の数と負の数が含まれているとします。別の値kがあります。積がkであるサブ配列が配列に存在するかどうかを確認する必要があります。 したがって、入力がnums =[-2、-1,1,3,5,8]、k =6のような場合、サブ配列は[-2、-1,3] これを解決するには、次の手順に従います- 最小:=nums [0]、最大:=nums [0] prod_max:=nums [0] 範囲1からnums-1のサイズのiの場合、do nums [i] <0の場合、 最大値と最小値を入れ替える maximum:=最大nums [i]および(maximum