Leetcode每日一题:3175. 找到连续赢 K 场比赛的第一位玩家

题意为给定一个数组,数组头两数比大小,大的放队首,小的放队尾,找到能够连续赢K次的数的编号。

思路:如果一轮比较完了,没有赢K次的,那答案就是数组最大值。利用双指针,模拟一轮比较,计算每个数的胜利次数,注意,若起点不是0的话,意味着他和之前的数比较是胜出的,所以初始为1,否则初始为0;

 1 class Solution {
 2 public:
 3     int findWinningPlayer(vector<int>& s, int k) {
 4         auto find_max=[&s]() -> int {
 5             int res=-1,idx=-1;
 6             for(int i=0;i<s.size();i++){
 7                 if(s[i]>res)
 8                 {
 9                     res=s[i];
10                     idx=i;
11                 }
12             }
13             return idx;
14         };
15 
16         int n=s.size();
17         int i=0,j=1;
18         while(i<n&&j<n){
19             while(i<n&&j<n&&s[j]<=s[i]) j++;
20             int initial_win=i>0?1:0;
21             if(j-i-1+initial_win>=k) return i;
22             i=j;
23             j=i+1;
24         }
25         return find_max();
26     }
27 };

 

posted on 2024-10-24 14:05  greenofyu  阅读(12)  评论(0编辑  收藏  举报