当前位置: 首页 > news >正文

[leetcode][2293]极大极小游戏

方法一:递归

思路与算法

  1. 按照题意构造下一级的数组
  2. 如果长度为1则返回

代码

class Solution {
    public int minMaxGame(int[] nums) {
        int n = nums.length;
        if (n == 1) {
            return nums[0];
        }
        int[] newNums = new int[n / 2];
        for (int i = 0; i < n / 2; i++) {
            if (i % 2 == 0) {
                newNums[i] = Math.min(nums[i * 2], nums[i * 2 + 1]);
            } else {
                newNums[i] = Math.max(nums[i * 2], nums[i * 2 + 1]);
            }
        }
        return minMaxGame(newNums);
    }
}

复杂度分析

时间复杂度:O(n),每一轮需要 n / 2 + n / 4 + … + 1 = n
空间复杂度:O(n),每个新数组的长度是 n / 2 + n / 4 + … + 1 = n

方法二:模拟

思路与算法

  1. 按照题意构造下一级的数组
  2. 如果长度为1则退出循环

代码

class Solution {
    public int minMaxGame(int[] nums) {
        int n = nums.length;
        while (n > 1) {
            int[] arr = new int[n / 2];
            for (int j = 0; j < n / 2; ++j) {
                if (j % 2 == 0) {
                    arr[j] = Math.min(nums[j * 2], nums[j * 2 + 1]);
                } else {
                    arr[j] = Math.max(nums[j * 2], nums[j * 2 + 1]);
                }
            }
            nums = arr;
            n /= 2;
        }
        return nums[0];
    }
}

复杂度分析

时间复杂度:O(n),每一轮需要 n / 2 + n / 4 + … + 1 = n
空间复杂度:O(n),每个新数组的长度是 n / 2 + n / 4 + … + 1 = n

方法三:原地修改

思路与算法

  1. nums[i]一旦被用来计算下一层的值,没有其他地方会被用到。因此nums[i]可以被覆盖,无需新建数组
  2. 如果长度为1则退出循环

代码

class Solution {
    public int minMaxGame(int[] nums) {
        int n = nums.length;
        while (n > 1) {
            int m = n / 2;
            for (int j = 0; j < m; ++j) {
                if (j % 2 == 0) {
                    nums[j] = Math.min(nums[j * 2], nums[j * 2 + 1]);
                } else {
                    nums[j] = Math.max(nums[j * 2], nums[j * 2 + 1]);
                }
            }
            n = m;
        }
        return nums[0];
    }
}

复杂度分析

时间复杂度:O(n),每一轮需要 n / 2 + n / 4 + … + 1 = n
空间复杂度:O(1),不需要额外空间

相关文章:

  • 怎样进行站点优化/百度系优化
  • 制作网站软件手机/微信朋友圈的广告怎么投放
  • 网站备案回访问题/常见的网络营销方式
  • 网站要用什么软件做/网页制作与设计教程
  • 手机网站做分享到朋友圈/精准引流推广团队
  • 工厂外包小件加工/wifi优化大师下载
  • Linux 中断子系统(四):GIC中断初始化
  • 模板的补充
  • 【链表】leetcode142.环形链表II(C/C++/Java/Js)
  • MySQL高级【MVCC原理分析】
  • 使用FFmpeg命令处理音视频
  • 音频音量调整中的ramp up down
  • LeetCode 5. 最长回文子串
  • 【阶段四】Python深度学习03篇:深度学习基础知识:神经网络可调超参数:激活函数、损失函数与评估指标
  • 一篇文章带你学会MySQL数据库的基本管理
  • 使用Python爬取CSDN历史博客文章列表,并生成目录
  • 打工人必学的法律知识(六)——《劳动法》案例-差绩效不等于「不能胜任工作」
  • iNav飞控AOCODARC-F7MINI固件编译