题目
You are given a 0-indexed integer array nums
whose length is a power of 2
.
Apply the following algorithm on nums
:
- Let
n
be the length ofnums
. Ifn == 1
, end the process. Otherwise, create a new 0-indexed integer arraynewNums
of lengthn / 2
. - For every even index
i
where0 <= i < n / 2
, assign the value ofnewNums[i]
asmin(nums[2 * i], nums[2 * i + 1])
. - For every odd index
i
where0 <= i < n / 2
, assign the value ofnewNums[i]
asmax(nums[2 * i], nums[2 * i + 1])
. - Replace the array
nums
withnewNums
. - Repeat the entire process starting from step 1.
Return the last number that remains in nums
after applying the algorithm.
题目解析
实际上就是一个非常简单的取最大值最小值的问题,有两种解法:递归和循环。
循环:
因为之后也不会再用到 nums[i]
这个数字,在进行计算了之后,并不会再次被用到,所以可以原地修改,节省空间。
时间复杂度:O(n)
空间复杂度:O(1)
1 | func minMaxGame(nums []int) int { |
递归:
在计算出新的数组之后,传入func,当n==1的时候返回nums[0],其余就递归就行
1 | func minMaxGame(nums []int) int { |