极大极小游戏

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

说在前面

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

问题描述

给你一个下标从 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
2月前
|
Java Android开发
大鱼吃小鱼【小游戏】
大鱼吃小鱼【小游戏】
99 0
|
2月前
|
Linux C语言
|
10月前
|
Python
实现一个2048小游戏
要实现一个2048小游戏,你需要使用Python编程语言和图形用户界面(GUI)库。下面是一个使用Tkinter库来创建2048小游戏的基本步骤
446 3
|
2月前
贪吃蛇小游戏
贪吃蛇小游戏
228 5
|
12月前
10点小游戏 2021-04-22
10点小游戏 2021-04-22
113 0
|
12月前
|
移动开发
H5贪吃蛇小游戏
H5贪吃蛇小游戏
点这里,玩小蚂蚁的小游戏
对于很多人来说(比如说我自己),平时没有大段的时间和精力去玩一个大游戏,这些人需要一些简单好玩的小游戏,拿起来就能玩几下,在忙碌的生活中寻求片刻的放松,随时又可以放下,继续回归到生活。如果你也是这些人的话,那么这些小游戏就是为你而做的,希望你能够喜欢。
89 0
点这里,玩小蚂蚁的小游戏
小蚂蚁的小游戏系列
对于很多人来说(比如说我自己),平时没有大段的时间和精力去玩一个大游戏,这些人需要一些简单好玩的小游戏,拿起来就能玩几下,在忙碌的生活中寻求片刻的放松,随时又可以放下,继续回归到生活。如果你也是这些人的话,那么这些小游戏就是为你而做的,希望你能够喜欢。
83 0
小蚂蚁的小游戏系列
|
算法
2048小游戏(变态版哦)
2048小游戏(变态版哦)
206 0
|
存储 定位技术 开发工具
坦克大战小游戏的实现
坦克大战小游戏的实现