极大极小游戏

简介: 🎈每天进行一道算法题目练习,今天的题目是“极大极小游戏”。

说在前面

🎈每天进行一道算法题目练习,今天的题目是“极大极小游戏”。

问题描述

给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。\
对 nums 执行下述算法:\
设 n 等于 nums 的长度,如果 n == 1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums ,新数组长度为 n / 2 ,下标从 0 开始。
对于满足 0 <= i < n / 2 的每个 偶数 下标 i ,将 newNums[i] 赋值 为 min(nums[2 i], nums[2 i + 1]) 。
对于满足 0 <= i < n / 2 的每个 奇数 下标 i ,将 newNums[i] 赋值 为 max(nums[2 i], nums[2 i + 1]) 。
用 newNums 替换 nums 。
从步骤 1 开始 重复 整个过程。
执行算法后,返回 nums 中剩下的那个数字。

示例 1:

image.png

输入: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.length 是 2 的幂

思路分析

首先我们应该先要理解一下题目的意思,我们可以结合实例一的图示来理解题目的这一段描述。

对于满足 0 <= i < n / 2 的每个 偶数 下标 i ,将 newNums[i] 赋值 为 min(nums[2 * i], nums[2 * i + 1]) 。
对于满足 0 <= i < n / 2 的每个 奇数 下标 i ,将 newNums[i] 赋值 为 max(nums[2 * i], nums[2 * i + 1]) 。
用 newNums 替换 nums 。

简单来说的话就是将整个数组元素两两成组,奇数组取其中的最小值,偶数组取其中的最大值,所以每进行一次分组操作,数组长度都会减半,数组减半到只有1个元素时,这个元素就是题目要我们求得的答案。

  • 1、循环处理数组

当前数组长度仍大于1时,需要继续处理数组数据。

while(nums.length > 1){
    ……
    ……
    nums = newNums;
}
  • 2、新数组赋值

新数组的长度为原数组长度的一半,且新数组下标为奇数时,取旧数组对中的最大值;新数组下标为偶数时,取旧数组对中的最小值。

let newNums = new Array(nums.length / 2).fill(0);
for(let i = 0; i < nums.length; i += 2){
    newNums[i / 2] = (i / 2) % 2 == 0 ? Math.min(nums[i],nums[i + 1]) : Math.max(nums[i],nums[i + 1]);
}

完整代码如下:

AC代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var minMaxGame = function(nums) {
    while(nums.length > 1){
        let newNums = new Array(nums.length / 2).fill(0);
        for(let i = 0; i < nums.length; i += 2){
            newNums[i / 2] = (i / 2) % 2 == 0 ? Math.min(nums[i],nums[i + 1]) : Math.max(nums[i],nums[i + 1]);
        }
        nums = newNums;
    }
    return nums[0];
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
机器学习/深度学习 PyTorch 算法框架/工具
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测
429 0
|
8月前
|
存储 人工智能 数据处理
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
秉承“以场景驱动创新” 的核心理念,持续深耕三大核心场景的关键能力,并对大模型 GenAI 场景的融合应用进行重点投入,为智能时代构建实时、高效、统一的数据底座。
435 10
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
|
8月前
|
人工智能 程序员 测试技术
通义灵码与魔搭 Notebook 深度集成:在线编码开箱即用,开发效率倍增
通义灵码 2.0 AI 程序员 2025 年 1 月正式上线,目前已经服务百万开发者,成为国内开发者最受欢迎的智能编码助手。
|
10月前
|
数据挖掘 数据安全/隐私保护 UED
千星计划小店模式开发
千星计划模式是一种创新的电商模式,旨在通过自动化操作和社交裂变效应,帮助用户轻松实现电商梦想并获取高额佣金
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的音乐推荐管理系统
基于Java+Springboot+Vue开发的音乐推荐管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的音乐推荐管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
281 8
基于Java+Springboot+Vue开发的音乐推荐管理系统
|
机器人 异构计算 SoC
实例2:树莓派GPIO控制外部LED灯闪烁
本文是一个关于使用树莓派GPIO控制外部LED灯闪烁的实验教程,介绍了树莓派的基本概念、GPIO接口的使用、RPi.GPIO库的基本操作,以及通过Python编程实现LED灯周期性闪烁的详细步骤和代码示例。
526 1
实例2:树莓派GPIO控制外部LED灯闪烁
|
TensorFlow 算法框架/工具 Python
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
|
JSON JavaScript 小程序
微信小程序使用echarts
直接将一整个项目下载下来,将下载下来的项目里的ec-canvas文件复制粘贴到项目文件夹中
589 1
|
机器学习/深度学习 人工智能 监控
DayDayUp:7月25日,如何打造技术品牌影响力?顶级大咖独家传授—阿里云乘风者计划专家博主&CSDN TOP1“一个处女座程序猿”《我是如何通过写作成为百万粉丝博主的?》演讲全文回顾
DayDayUp:7月25日,如何打造技术品牌影响力?顶级大咖独家传授—阿里云乘风者计划专家博主&CSDN TOP1“一个处女座程序猿”《我是如何通过写作成为百万粉丝博主的?》演讲全文回顾 目录 个人简介 一、什么内容是受欢迎的写作内容? 1.1、学生(计算机相关)群体 1.2、同行(开发者)群体 1.3、好内容的特点 二、一些经典的技术文章逻辑框架设计 2.1、从写作逻辑和结构角度考虑 (1)、对于bug类型的文章——通过分析刨根问底 (2)、对于学习类型的文章—通过案例学以致用 (3)、对于总结类型的文章—通过思考产生共鸣 2.2、从写作技巧考虑 (1)、题目和摘要必须简单、清晰明了且定位
DayDayUp:7月25日,如何打造技术品牌影响力?顶级大咖独家传授—阿里云乘风者计划专家博主&CSDN TOP1“一个处女座程序猿”《我是如何通过写作成为百万粉丝博主的?》演讲全文回顾
|
uml C语言
如何画系统时序图
如何画系统时序图
569 0