leetcode 2293
题目描述
2293. 极大极小游戏
给你一个下标从 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:
1 |
|
解题思路
- 迭代,除了个别行,和官方题解竟然一模一样,变量名都一样
执行用时:1 ms, 在所有 Java 提交中击败了71.01%的用户
内存消耗:40.8 MB, 在所有 Java 提交中击败了92.02%的用户
通过测试用例:96 / 96
时间 O(n)
空间 O(n)
1 |
|
- 原地操作:在顺序遍历的情况下,newNums[i]的结果可以直接存在nums[i]中,因为,nums[i]的值在本次循环中不会再使用了,之前在计算nums[i/2]的时候已经被使用过了。但不只为何,内存消耗不降反增。
执行用时:1 ms, 在所有 Java 提交中击败了71.01%的用户
内存消耗:41.1 MB, 在所有 Java 提交中击败了47.06%的用户
通过测试用例:96 / 96
时间 O(n)
空间 O(1)
1 |
|
leetcode 2293
https://kkkkkong.github.io/posts/36634.html