題目: LeetCode - 1535. Find the Winner of an Array Game

題目說明

給一個陣列及一個整數 k,每次比對陣列前兩個數字,比較大的留著,較小的放到陣列尾端,求贏了 k 次的數。

解題思路

其實放到尾端只是幌子,題目的答案其實只要遍歷一次陣列即可找到。定義一個 currMax 紀錄遍歷到目前的最大值,count 計算贏的次數,若 count 等於 k 就直接回傳 currMax,若遍歷完還沒回傳,代表 currMax 為最大值,直接回傳即可。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// fast IO
static auto __ = []()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();
class Solution {
public:
int getWinner(vector<int>& arr, int k) {
int currMax = arr[0], count = 0, n = arr.size();
for(int i = 1; i < n; ++i)
{
arr[i] > currMax ? currMax = arr[i], count = 1 : ++count;
if(count == k)
return currMax;
}
return currMax;
}
};