Skip to content

Commit cad62fa

Browse files
committed
1535. Find the Winner of an Array Game: AC
1 parent 734e79d commit cad62fa

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

src/solution/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1157,3 +1157,4 @@ mod s1529_minimum_suffix_flips;
11571157
mod s1530_number_of_good_leaf_nodes_pairs;
11581158
mod s1531_string_compression_ii;
11591159
mod s1534_count_good_triplets;
1160+
mod s1535_find_the_winner_of_an_array_game;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/**
2+
* [1535] Find the Winner of an Array Game
3+
*
4+
* Given an integer array arr of distinct integers and an integer k.
5+
* 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.
6+
* Return the integer which will win the game.
7+
* It is guaranteed that there will be a winner of the game.
8+
*
9+
* Example 1:
10+
*
11+
* Input: arr = [2,1,3,5,4,6,7], k = 2
12+
* Output: 5
13+
* Explanation: Let's see the rounds of the game:
14+
* Round | arr | winner | win_count
15+
* 1 | [2,1,3,5,4,6,7] | 2 | 1
16+
* 2 | [2,3,5,4,6,7,1] | 3 | 1
17+
* 3 | [3,5,4,6,7,1,2] | 5 | 1
18+
* 4 | [5,4,6,7,1,2,3] | 5 | 2
19+
* So we can see that 4 rounds will be played and 5 is the winner because it wins 2 consecutive games.
20+
*
21+
* Example 2:
22+
*
23+
* Input: arr = [3,2,1], k = 10
24+
* Output: 3
25+
* Explanation: 3 will win the first 10 rounds consecutively.
26+
*
27+
*
28+
* Constraints:
29+
*
30+
* 2 <= arr.length <= 10^5
31+
* 1 <= arr[i] <= 10^6
32+
* arr contains distinct integers.
33+
* 1 <= k <= 10^9
34+
*
35+
*/
36+
pub struct Solution {}
37+
38+
// problem: https://leetcode.com/problems/find-the-winner-of-an-array-game/
39+
// discuss: https://leetcode.com/problems/find-the-winner-of-an-array-game/discuss/?currentPage=1&orderBy=most_votes&query=
40+
41+
// submission codes start here
42+
43+
impl Solution {
44+
pub fn get_winner(arr: Vec<i32>, k: i32) -> i32 {
45+
let mut result = arr[0];
46+
if k == 1 {
47+
result.max(arr[1])
48+
} else {
49+
arr.iter().try_fold(-1, |c, &x| {
50+
if x > result {
51+
result = x;
52+
Some(1)
53+
} else {
54+
if c + 1 == k {
55+
None
56+
} else {
57+
Some(c + 1)
58+
}
59+
}
60+
});
61+
result
62+
}
63+
}
64+
}
65+
66+
// submission codes end
67+
68+
#[cfg(test)]
69+
mod tests {
70+
use super::*;
71+
72+
#[test]
73+
fn test_1535_example_1() {
74+
let arr = vec![2, 1, 3, 5, 4, 6, 7];
75+
let k = 2;
76+
77+
let result = 5;
78+
79+
assert_eq!(Solution::get_winner(arr, k), result);
80+
}
81+
82+
#[test]
83+
fn test_1535_example_2() {
84+
let arr = vec![3, 2, 1];
85+
let k = 10;
86+
87+
let result = 3;
88+
89+
assert_eq!(Solution::get_winner(arr, k), result);
90+
}
91+
}

0 commit comments

Comments
 (0)