Leetcode 2293. 极大极小游戏(可以.一次过)
Published on 2022-06-10 11:22 in 分类: C/C++ with 萧海~
分类: C/C++

Leetcode 2293. 极大极小游戏(可以.一次过)

    在这里插入图片描述
    给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。

    对 nums 执行下述算法:

    1. 设 n 等于 nums 的长度,如果 n == 1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums ,新数组长度为 n
      / 2 ,下标从 0 开始。
    2. 对于满足 0 <= i < n / 2 的每个 偶数 下标 i ,将 newNums[i] 赋值 为 min(nums[2 * i],
      nums[2 * i + 1]) 。
    3. 对于满足 0 <= i < n / 2 的每个 奇数 下标 i ,将 newNums[i] 赋值 为 max(nums[2 * i],
      nums[2 * i + 1]) 。
    4. 用 newNums 替换 nums 。
    5. 从步骤 1 开始 重复 整个过程。

    执行算法后,返回 nums 中剩下的那个数字。

    示例 1:

    在这里插入图片描述

    输入:nums = [1,3,5,2,4,8,2,2]
    输出:1
    解释:重复执行算法会得到下述数组。
    第一轮:nums = [1,5,4,2]
    第二轮:nums = [1,4]
    第三轮:nums = [1]
    1 是最后剩下的那个数字,返回 1

    示例 2:

    输入:nums = [3]
    输出:3
    解释:3 就是最后剩下的数字,返回 3 。

    提示:

    • 1 <= nums.length <= 1024
    • 1 <= nums[i] <= 10^9
    • nums.length 是 2 的幂

    Code:

    class Solution {
    public:
    int minMaxGame(vector<int>& nums) {
    do
    {
    int n=nums.size();
    if(n==1)
    return nums[0];
    vector<int>newnums;
    newnums.resize(nums.size()/2);
    copy(nums.begin(),nums.begin()+nums.size()/2,newnums.begin());
    for(int i=0;i<newnums.size();i++)
    {
    if((i%2)==0)
    {
    int num=min(nums[2*i],nums[2*i+1]);
    newnums[i]=num;
    }
    else
    {
    int num=max(nums[2*i],nums[2*i+1]);
    newnums[i]=num;
    }
    }
    nums=newnums;
    }while(1);
    return 0;
    }
    };
    posted @   萧海~  阅读(24)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · winform 绘制太阳,地球,月球 运作规律
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    点击右上角即可分享
    微信分享提示
    电磁波切换