1535. 找出数组游戏的赢家

class Solution {
public:
    int getWinner(vector<int>& arr, int k) {
        int prev = max(arr[0], arr[1]);
        if (k == 1) {
            return prev;
        }
        int consecutive = 1;
        int maxNum = prev;
        int length = arr.size();
        for (int i = 2; i < length; i++) {
            int curr = arr[i];
            if (prev > curr) {
                consecutive++;
                if (consecutive == k) {
                    return prev;
                }
            } else {
                prev = curr;
                consecutive = 1;
            }
            maxNum = max(maxNum, curr);
        }
        return maxNum;
    }
};

该方法接受一个整数向量 arr 和一个整数 k 作为输入,并返回一个整数。该方法用于找出在给定数组和 k 值的情况下游戏的胜者。

游戏的规则如下:从数组的第一个元素开始,将其与下一个元素进行比较。如果当前元素较大,继续将其与后续元素进行比较,直到找到一个比当前元素大的元素,或者已经与 k 个元素进行了比较。如果当前元素小于下一个元素,则将当前元素更新为下一个元素,并重置连续胜利的计数。胜者是最后一个与它连续比较了 k 次的元素。

方法首先将前一个元素初始化为数组前两个元素中的最大值。如果 k 为 1,则直接返回前一个元素。否则,它将连续胜利的计数初始化为 1,并将迄今为止看到的最大数字初始化为前一个元素。然后,它从数组的第三个元素开始迭代,根据需要更新前一个元素、连续胜利的计数和迄今为止看到的最大数字。如果连续胜利的计数达到 k,则返回前一个元素。如果循环完成而没有找到胜者,则返回迄今为止看到的最大数字。

  1. 初始化 prev 变量为数组中的最大出价,即 arr[0] 和 arr[1] 中的较大者。
  2. 如果 k 等于 1,直接返回 prev,因为只有一轮对决,最高出价即为结果。
  3. 初始化 consecutive 变量为 1(因为至少有一轮对决),maxNum 变量为 prev
  4. 遍历数组 arr,从索引 2 开始,因为索引 0 和 1 已经被用来初始化 prev 和 maxNum
  5. 对于每一轮,比较 prev 和当前索引 i 的出价 arr[i]
    • 如果 prev 高于 arr[i],说明当前选手连续赢得了一轮,consecutive 增1。
      • 如果 consecutive 达到 k,则返回 prev,因为选手已经连续赢得 k 轮。
    • 如果 arr[i] 高于 prev,则重置 prev 为 arr[i],同时重置 consecutive 为 1,因为轮到另一个选手了。
  6. 每轮结束后,更新 maxNum 为当前索引 i 的出价 arr[i] 和 maxNum 中的较大者。
  7. 遍历结束后,返回 maxNum,即数组中的最大出价。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值