Monthly Archives: September 2024
C# || How To Find The Winner Of Array Game Using C#
The following is a module with functions which demonstrates how to find the winner of array game using C#.
1. Get Winner – Problem Statement
Given an integer array arr of distinct integers and an integer k.
A game will be played between the first two elements of the array (i.e. arr[0] and arr[1]). In each round of the game, we compare arr[0] with arr[1], the larger integer wins and remains at position 0, and the smaller integer moves to the end of the array. The game ends when an integer wins k consecutive rounds.
Return the integer which will win the game.
It is guaranteed that there will be a winner of the game.
Example 1:
Input: arr = [2,1,3,5,4,6,7], k = 2
Output: 5
Explanation: Let's see the rounds of the game:
Round | arr | winner | win_count
1 | [2,1,3,5,4,6,7] | 2 | 1
2 | [2,3,5,4,6,7,1] | 3 | 1
3 | [3,5,4,6,7,1,2] | 5 | 1
4 | [5,4,6,7,1,2,3] | 5 | 2
So we can see that 4 rounds will be played and 5 is the winner because it wins 2 consecutive games.
Example 2:
Input: arr = [3,2,1], k = 10
Output: 3
Explanation: 3 will win the first 10 rounds consecutively.
2. Get Winner – Solution
The following is a solution which demonstrates how to find the winner of array game.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// ============================================================================ // Author: Kenneth Perkins // Date: Sep 1, 2024 // Taken From: http://programmingnotes.org/ // File: Solution.cs // Description: Demonstrates how to find the winner of array game // ============================================================================ public class Solution { public int GetWinner(int[] arr, int k) { int maxElement = arr[0]; for (int index = 1; index < arr.Length; ++index) { maxElement = Math.Max(maxElement, arr[index]); } int curr = arr[0]; int winstreak = 0; for (int index = 1; index < arr.Length; ++index) { int opponent = arr[index]; if (curr > opponent) { ++winstreak; } else { curr = opponent; winstreak = 1; } if (winstreak == k || curr == maxElement) { return curr; } } return -1; } }// http://programmingnotes.org/ |
QUICK NOTES:
The highlighted lines are sections of interest to look out for.
The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.
Once compiled, you should get this as your output for the example cases:
5
3