LeetCode 2293. 极大极小游戏

news2024/11/18 3:38:03

【LetMeFly】2293.极大极小游戏

力扣题目链接:https://leetcode.cn/problems/min-max-game/

给你一个下标从 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] <= 109
  • nums.length2 的幂

方法一:递归

如果数组nums中只有一个元素,那么直接返回这个元素就是答案。

否则,我们需要创建一个新的数组,将原始数组两两取最大最小后,添加到新的数组中。

这样操作后,我们就得到了新的数组。接下来,递归调用这个函数,计算新数组的再新数组,直到长度为1,直接返回数组中的唯一元素为止。

  • 时间复杂度 O ( n ) O(n) O(n),其中 n = l e n ( n u m s ) n=len(nums) n=len(nums) O ( n ) + O ( n 2 ) + O ( n 4 ) + ⋯ + O ( 1 ) = O ( n ) O(n)+O(\frac{n}{2})+O(\frac{n}{4})+\cdots+O(1)=O(n) O(n)+O(2n)+O(4n)++O(1)=O(n)
  • 空间复杂度 O ( n ) O(n) O(n)

AC代码

C++

class Solution {
public:
    int minMaxGame(vector<int>& nums) {
        if (nums.size() == 1)
            return nums[0];
        vector<int> newNum;
        int loc = 0;
        bool isMin = true;
        while (loc < nums.size()) {
            if (isMin) {
                newNum.push_back(min(nums[loc++], nums[loc++]));
                isMin = false;
            }
            else {
                newNum.push_back(max(nums[loc++], nums[loc++]));
                isMin = true;
            }
        }
        return minMaxGame(newNum);
    }
};

Python

class Solution:
    def minMaxGame(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return nums[0]
        newNum = []
        loc = 0
        isMin = True
        while loc < len(nums):
            if isMin:
                newNum.append(min(nums[loc], nums[loc + 1]))
                isMin = False
            else:
                newNum.append(max(nums[loc], nums[loc + 1]))
                isMin = True
            loc += 2
        return self.minMaxGame(newNum)

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/128691681

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenCV】形态学操作 | 图像平滑 | 边缘检测 | Laplacian算子

Ⅰ. 形态学操作 0x00 腐蚀和膨胀 腐蚀和膨胀是最基本的形态学操作&#xff0c;腐蚀和膨胀都是针对白色部分&#xff08;高亮部分&#xff09;而言的。 膨胀就是使图像中的高亮部分扩张&#xff0c;效果图拥有比原图更大的高亮区域&#xff1b;腐蚀是原图中的高亮区域被蚕食&…

C语言文件补充笔记2:VS查看定义、文件章节涉及到的函数

1 VS查看函数的定义与库的原码 &#xff08;1&#xff09;查看库函数的定义 右击要查看的函数&#xff0c;然后“转到定义” 这里就跳转到了定义的所在文件 在右上角关闭相关文件 &#xff08;2&#xff09; 查看库原码 将鼠标放到导入的库中&#xff0c;然后右击&#…

给数组创建复制(深拷贝)给数组创建复制(深拷贝)

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 数组的深拷贝、浅拷贝、引用拷贝 修改原数组不会影响复制后的数组 numpy.copy() [太阳]选择题 对于以下python代码最后输出的结果是? import numpy as np print("【执行】a np.arang…

awesome平铺窗口使用笔记

这个故事要从vim开始。从入了vim的坑以后&#xff0c;就爱上了平铺窗口模式。在macOS中就开始使用yabai。使用了yabai以后&#xff0c;就很大程序可以用键盘完成大部分操作了。然后我开始用linux&#xff0c;使用的是i3wm。感觉非常不错&#xff0c;几乎就与vim中的窗口管理差不…

[Android Studio] 如何查看Android Studio的版本信息

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…

命令行批量 PDF 转换器:2PDF 2.0.8x Crack

命令行 PDF 转换器 2PDF 是一个专业的命令行实用程序&#xff0c;用于以批处理模式将办公文档和图像转换为 PDF。2PDF 基于命令行界面和语法&#xff0c;通过简单的标准命令提供对批量转换为 PDF 的完全控制。 从 Windows 命令提示符将文档和图像转换为 PDF 2PDF 可以将 PDF 和…

面试官问我微服务注册中心如何保证数据强一致性?头秃了。。。

目录 1、再回顾&#xff1a;什么是服务注册中心&#xff1f;2、Consul服务注册中心的整体架构3、Consul如何通过Raft协议实现强一致性&#xff1f;4、Consul如何通过Agent实现分布式健康检查&#xff1f; 1、再回顾&#xff1a;什么是服务注册中心&#xff1f; 先回顾一下什么…

Promise 详解

Promise 详解示例一个抽奖小游戏原生 JavaScript 实现Promise 实现读取文件原生 JavaScript 实现Promise 实现Promise 对象Promise 对象的状态Promise 对象的创建Promise 对象的状态的改变pending 转换为 fulfilledpending 转换为 rejected与 Promise 对象相关的 APIPromise.th…

Linux---gdb调试方法

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项2. gdb调试 进入/退出调试&#xff1a; list/l 行号&#xff1a;显…

佳能2420报错代码E000007-0000

应该是定影的问题&#xff0c;先试一下清零&#xff0c;如果还是出现这个问题&#xff0c;不是电压就是应该换定影了。&#xff08;包含&#xff1a;轴套、定影膜、缺硅油了【定影膜硅油、润滑脂】&#xff09; 维修模式菜单&#xff1a; CLEAR > ENGIN > ERRCLR &…

交大博士学长:研究生计算机专业的方向选择!

Datawhale干货 作者&#xff1a;一辈闲&#xff0c;上海交大博士&#xff0c;Datawhale邀约作者作者知乎&#xff1a;https://www.zhihu.com/people/yi-bei-xian-16目前计算机专业的研究方向主要分为四个大方向分别是&#xff1a;AI&#xff08;人工智能&#xff09;、Systems&…

常微分方程组解稳定性的分析

文章未完相空间的绘制我们随机选一个方程,随机选的,不是有数学手册吗,一般来说考题不可能出数学手册上的例子import scipy.integrate as si import matplotlib.pyplot as plt import numpy as np## dx/dt x**2-y**2xy ## dy/dt x*y**2 - x**2*yf lambda x,y:x**2-y**2xy g…

HashMap、HashTable和ConcurrentHashMap的区别

HashMap是线程不安全的&#xff0c;HashTable和ConcurrentHashMap是线程安全的。HashTable的实现线程安全的方式是&#xff1a;将所有的方法都加上锁&#xff0c;也就相当于对this加锁&#xff0c;此时&#xff0c;无论访问HashTable的任何一个元素都会加锁操作&#xff0c;在多…

ESP32设备驱动-MMA8451加速度计驱动

MMA8451加速度计驱动 1、MMA8451介绍 MMA8451 是一款具有 14 位分辨率的低功耗加速度计,具有灵活用户可编程选项的嵌入式功能,可配置为两个中断引脚。嵌入式中断功能可实现整体节能,从而使主机处理器免于连续轮询数据访问低通滤波数据和高通滤波数据,最大限度地减少颠簸检…

DockerCompose安装卸载、文件语法格式

DockerCompose安装卸载、文件语法格式 一、DockerCompose的概念和作用 1.1 相关概念 DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;不需要我们手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如…

【蓝桥杯】时间显示(省赛)Java

【问题描述】 小蓝要和朋友合作开发一个时间显示的网站。在服务器上&#xff0c;朋友已经获取了当前的时间&#xff0c;用一个整数表示&#xff0c;值为从1970年1月1日O0:00:00到当前时刻经过的毫秒数。 现在&#xff0c;小蓝要在客户端显示出这个时间。小蓝不用显示出年月日&a…

IIC通信协议

数据有效性 IC由两条线组成&#xff0c;一条双向串行数据线SDA&#xff0c;一条串行时钟线SCL。 SDA线上的数据必须在时钟的高电平周期保持稳定&#xff0c;数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。 换言之&#xff0c; SCL为高电平时表示有效数据…

Crack:结构分析和设计软件:Cross Section Analysis-Design

Cross Section Analysis & Design &#xff08;美国、欧洲、亚洲和澳大利亚最受好评的结构软件&#xff09;是一款功能强大的应用程序&#xff0c;可以执行各种横截面计算&#xff0c;包括钢筋混凝土截面的设计&#xff08;钢筋计算器&#xff09;。所提供的横截面可以是简…

Python之argparse模块的使用

我们在写一个成熟的Python项目时候&#xff0c;需要传入若干指定的参数。而不是写死在程序里&#xff0c;这个时候就要用到argparse模块。argparse 是 Python 内置的一个用于命令项选项与参数解析的模块&#xff0c;通过在程序中定义好我们需要的参数&#xff0c;argparse 将会…

【FPGA笔记系列3】assign语句和if-esle语句

结构化建模 前面几节中采用的方法称为结构化建模。 assign语法(数据流建模方式) assign语句仅能描述组合逻辑电路,没有涉及时钟、触发器等! 五人投票电路(由于CGD100板子原因,需修改逻辑使按下点亮,弹起熄灭) 因为板子当key按下时为低电平,弹起时为高电平;led高电平点…