シングルムーブを使用してkによって移動された配列要素?
シャッフルされた順序で1からnまでのn個の要素を持つ配列があるとします。別の整数Kが与えられます。バドミントンをするために列に並んでいるのはN人です。最初の2人のプレーヤーはプレーに行き、次に敗者はキューの最後に行き、配置します。勝者は、キューの次の人と対戦します。誰かがK回連続で勝つまでプレイします。その後、そのプレーヤーが勝者になります。
キューが[2、1、3、4、5]のようで、K =2の場合、出力は5になります。説明を参照してください-
(2、1)プレイ、2勝、つまり1がキューに追加されます。キューは[3、4、5、1](2、3)プレイ、3勝、つまり2がキューに追加されます。キューは[4、5、1、2](3、4)プレイ、4勝のようなものなので、3がキューに追加され、キューは[5、1、2、3](4、5)プレイ、 5勝なので、4がキューに追加され、キューは[1、2、3、4](5、1)プレイ、5勝、3がキューに追加され、キューは[2、3]のようになります。 、4、1]
(2、1)プレイ、2勝、1がキューに追加され、キューは[3、4、5、1]
のようになります(2、3)プレイ、3勝、2がキューに追加され、キューは[4、5、1、2]
のようになります(3、4)プレイ、4勝、3がキューに追加され、キューは[5、1、2、3]
のようになります(4、5)プレイ、5勝、4がキューに追加され、キューは[1、2、3、4]
のようになります(5、1)プレイ、5勝、3がキューに追加され、キューは[2、3、4、1]
のようになります5が2つの連続した試合に勝つと、出力は5になります。
アルゴリズム
勝者(arr、n、k)
Begin if k >= n-1, then return n best_player := 0 win_count := 0 for each element e in arr, do if e > best_player, then best_player := e if e is 0th element, then win_count := 1 end if else increase win_count by 1 end if if win_count >= k, then return best player done return best player End
例
#include <iostream> using namespace std; int winner(int arr[], int n, int k) { if (k >= n - 1) //if K exceeds the array size, then return n return n; int best_player = 0, win_count = 0; //initially best player and win count is not set for (int i = 0; i < n; i++) { //for each member of the array if (arr[i] > best_player) { //when arr[i] is better than the best one, update best best_player = arr[i]; if (i) //if i is not the 0th element, set win_count as 1 win_count = 1; }else //otherwise increase win count win_count += 1; if (win_count >= k) //if the win count is k or more than k, then we have got result return best_player; } return best_player; //otherwise max element will be winner. } main() { int arr[] = { 3, 1, 2 }; int n = sizeof(arr) / sizeof(arr[0]); int k = 2; cout << winner(arr, n, k); }
出力
3
-
C言語を使用してキュー内の要素を削除することを説明する
データ構造は、構造化された方法で編成されたデータのコレクションです。以下に説明するように、2つのタイプに分けられます- 線形データ構造 −データは直線的に編成されます。たとえば、配列、構造、スタック、キュー、リンクリスト。 非線形データ構造 −データは階層的に編成されています。たとえば、ツリー、グラフ、セット、テーブル。 キュー これは線形データ構造であり、挿入は後端で行われ、削除は前端で行われます。 キューの順序はFIFO–先入れ先出しです。 操作 挿入–要素をキューに挿入します。 削除–キューから要素を削除します。 条件 キューオーバーフロー-要素を完全
-
Cのリンクリストを使用した優先キュー
データと優先度は整数値として与えられ、タスクは与えられた優先度に従ってリンクリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先度付きキュー