【力扣题解】6090. 极大极小游戏
😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
-
- 一、题目
-
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
-
- 1、思路分析
- 2、代码详解
- 三、本题知识
一、题目
1、题目描述
给你一个下标从 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 中剩下的那个数字。
2、基础框架
- Java版本框架代码如下:
class Solution { public int minMaxGame(int[] nums) { }}
3、原题链接
6090. 极大极小游戏
二、解题报告
1、思路分析
(1)当数组的长度等于一的时候,直接返回这个数组的元素。
(2)当数组的长度大于一时,定义数组newNums ,遍历nums数组,根据题目要求对newNums赋值,然后递归。
2、代码详解
class Solution { public int minMaxGame(int[] nums) { int n = nums.length/2; if(nums.length == 1) { return nums[0]; } int[] newNums = new int[n]; for(int i = 0;i < n;i++) { if(i%2 == 0) { newNums[i] = Math.min(nums[2*i],nums[2*i + 1]); }else { newNums[i] = Math.max(nums[2*i],nums[2*i + 1]); } } return minMaxGame(newNums); }}
三、本题知识
递归