想要精通算法和SQL的成长之路 - 预测赢家

news2024/11/26 7:32:17

想要精通算法和SQL的成长之路 - 预测赢家

  • 前言
  • 一. 预测赢家
  • 二. 石子游戏(预测赢家的进阶版)
    • 2.1 博弈论

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 预测赢家

原题链接
在这里插入图片描述

主要思路:

  1. 我们定义dp[i][j]:在区间 [i, j] 之间先手情况下能拿到的相对分数
  2. 因为玩家1是先手,那么我们站在玩家1的角度来思考,在区间 [i, j] 之间,如果玩家1选择最左侧,值为num[i]。那么玩家2只能在[i-1,j]区间内选择,并且是先手。那么他能拿到的最大相对分数就是:dp[i+1][j]。那么此时玩家1选择左手时的相对分数就是:num[i] - dp[i+1][j]
  3. 同理如果玩家1先手选择最右侧,那么此时玩家1选择左手时的相对分数就是:num[j] - dp[i][j-1]
  4. 那么本次玩家1应该选择利益最大化的,即:Max(num[i] - dp[i+1][j], num[j] - dp[i][j-1])
  5. 只要这个值 >=0 (相对分数,差值)玩家1就是胜利者。

代码如下:

public boolean predictTheWinner(int[] nums) {
    return dfs(0, nums.length - 1, nums) >= 0;
}

public int dfs(int left, int right, int[] nums) {
    // 遍历完了,返回0
    if (left > right) {
        return 0;
    }
    // 选择最左侧时的最大相对差值
    int chooseLeft = nums[left] - dfs(left + 1, right, nums);
    // 选择最右侧时的最大相对差值
    int chooseRight = nums[right] - dfs(left, right - 1, nums);
    // 返回最大相对差值
    return Math.max(chooseLeft, chooseRight);
}

当然,这类递归性质的代码,往往都存在一些重复计算的动作,我们用一个全局的数组,来记录递归过程中计算出来的值,即:记忆化搜索。

private int[][] memo;

public boolean predictTheWinner(int[] nums) {
    int len = nums.length;
    memo = new int[len][len];
    // 初始化一个比较特殊的值,用于判断是否计算过
    for (int i = 0; i < len; i++) {
        Arrays.fill(memo[i], Integer.MAX_VALUE);
    }
    return dfs(0, nums.length - 1, nums) >= 0;
}

public int dfs(int left, int right, int[] nums) {
    if (left > right) {
        return 0;
    }
    // 记忆化搜索,如果搜索过,直接返回
    if(memo[left][right] != Integer.MAX_VALUE) {
        return memo[left][right];
    }
    // 如果当前先手,选择左边的数,那么后手就是:dfs(left + 1, right, nums),计算后手的最大值,我们求此时先后手的相对值
    int chooseLeft = nums[left] - dfs(left + 1, right, nums);
    int chooseRight = nums[right] - dfs(left, right - 1, nums);
    return memo[left][right] = Math.max(chooseLeft, chooseRight);
}

二. 石子游戏(预测赢家的进阶版)

原题链接
在这里插入图片描述
这个题目相当于在第一题的基础上多了两个条件:

  • 石头总数为奇数。
  • 堆数为偶数。

也就是说不可能存在平局的情况。

2.1 博弈论

在满足上述两个条件的基础上:先手必胜。

我们假设一个数组如下:[奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶]。

  • 那么对于先手而言:他能选择的序列为:奇偶序列(头和尾)[, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, ]。
  • 那么对于后手而言:如果先手选择的是奇数,那么后手选择的序列只能是偶偶序列。[“先手选的”, , 奇, 偶, 奇, 偶, 奇, 偶, 奇, 偶, 奇, ]。反之同理,只能选择奇奇序列。

总之就是:先手必定是奇偶性不同的局面。后手必定是奇偶性相同的局面。

那么问题简单了,我们只需要知道,奇序列的总和偶序列总和 谁大,然后先手每次决策的时候,限制对方只能选择奇偶序列的对立面即可。

因此题目中既然说明了Alice先手的情况,我们直接返回true就完事了。

public boolean stoneGame(int[] piles) {
    return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT 6.5下载安装及配置教程

一、下载 今天打算换一个QT安装版本,去官网看了一眼发现变成了在线安装。 本来官方下载的就慢,现在更是雪上加霜,现在给大家推荐几种下载方式。 1、国内镜像 中国科学技术大学&#xff1a;http://mirrors.ustc.edu.cn/qtproject/ 清华大学&#xff1a;https://mirrors.tuna.ts…

基于强化学习的节能路由(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

员工电脑怎么监控(怎样远程监控员工电脑)

随着科技的发展&#xff0c;企业对于员工电脑的监控已经成为了企业管理的重要手段。通过监控员工电脑&#xff0c;企业可以更好地管理员工的工作效率、保护企业数据安全以及维护企业的正常运营。本文将详细介绍如何监控公司员工电脑的方法和步骤。 监控员工电脑的目的 提高工作…

Selenium-介绍下其他骚操作

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…

vsc使用flake8的一个小问题

当单行写入代码长度过长时候PEP8会直接提示报错&#xff0c;在flake8中的单行代码限制是小于80但是对于一些需要精准import的代码来说远不够用&#xff0c;网络上有人说直接在josn文件中做变动&#xff0c;但是当导入相关命令的时候&#xff0c;会显示该命令不可用&#xff0c;…

一步到位:用Python实现PC屏幕截图并自动发送邮件,实现屏幕监控

在当前的数字化世界中&#xff0c;自动化已经成为我们日常生活和工作中的关键部分。它不仅提高了效率&#xff0c;还节省了大量的时间和精力。在这篇文章中&#xff0c;我们将探讨如何使用Python来实现一个特定的自动化任务 - PC屏幕截图自动发送到指定的邮箱。 这个任务可能看…

Vulnhub系列靶机-Hackadmeic.RTB1

文章目录 Vulnhub系列靶机-Hackadmeic.RTB11. 信息收集1.1 主机扫描1.2 端口扫描1.3 目录爆破 2. 漏洞探测3. 漏洞利用3.1 反弹Shell 4. 内核提权 Vulnhub系列靶机-Hackadmeic.RTB1 1. 信息收集 1.1 主机扫描 arp-scan -l1.2 端口扫描 nmap -A -p- 192.168.188.184扫描到了…

大功率光伏应用不同多电平变换器拓扑的比较研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

美团2024届秋招笔试第一场编程【小美走公路】

题目描述&#xff1a; 有一个环形的公路&#xff0c;上面共有n站&#xff0c;现在给定了顺时针第i站到第i1站之间的距离&#xff08;特殊的&#xff0c;也给出了第n站到第 1 站的距离&#xff09;。小美想沿着公路第x站走到第y站&#xff0c;她想知道最短的距离是多少&#xf…

自然语言处理(一):基于统计的方法表示单词

文章目录 1. 共现矩阵2. 点互信息3. 降维&#xff08;奇异值分解&#xff09; 1. 共现矩阵 将一句话的上下文大小窗口设置为1&#xff0c;用向量来表示单词频数&#xff0c;如&#xff1a; 将每个单词的频数向量求出&#xff0c;得到如下表格&#xff0c;即共现矩阵&#x…

分别用Python和Go实现对文件夹及其子文件夹里的文件进行批量重命名

文章目录 问题阐述上代码结果如何 问题阐述 最近在继续提高自己的go技术时&#xff0c;从网上一些平台获取到了一些学习资料&#xff0c;然后下载到本地后&#xff0c;文件的命名是真的像衣托答辩&#xff1a; 除了上述的文件&#xff0c;还有一mol多神奇的命名&#xff0c;害…

GROMACS Tutorial 1: Lysozyme in Water 中文实战教程

GROMACS Tutorial 1: Lysozyme in Water 中文实战教程 前言系统环境特别强调一、预处理阶段1.1 补全原子或残基1.2 删除水分子1.3 生成top文件等位置限制文件 二、定义盒子及添加溶剂2.1 定义盒子2.2 加入溶剂 三、添加离子3.1 使用mdp参数文件生成tpr文件3.2 离子的加入3.3 添…

MasterAlign相机参数设置-曝光时间调节

相机参数设置-曝光时间调节操作说明 相机参数的设置对于获取清晰、准确的图像至关重要。曝光时间是其中一个关键参数&#xff0c;它直接影响图像的亮度和清晰度。以下是关于曝光时间调节的详细操作步骤&#xff0c;以帮助您轻松进行设置。 步骤一&#xff1a;登录系统 首先&…

避免分库分表,绿普惠的分布式数据库选型与实践

作者&#xff1a;翻墨&#xff0c;绿普惠科技&#xff08;北京&#xff09;有限公司架构师 一项数据显示&#xff0c;今天大气中的二氧化碳水平比过去 65 万年高了 27%。主要原因来自于工业化需求下的煤炭燃烧、汽车尾气。随着人类活动造成的温室效应加剧&#xff0c;环保越来越…

从服务器指定位置下载文件

从服务器指定位置下载文件 下载文件转换成流&#xff0c;这里说两种流的方式:1. 文件流2. 字节流 下载文件转换成流&#xff0c;这里说两种流的方式: 1. 文件流 2. 字节流 一&#xff0c;字节流 String filePath“/opt/peoject/file/123/pdf”; //这个是你服务上存放文件位置…

公司监控员工上网记录,具体能监控到哪些内容?

在信息时代&#xff0c;随着技术的发展和商业竞争的加剧&#xff0c;公司对员工的监控变得越来越普遍。本文将从多个角度探讨公司监控员工电脑的利与弊&#xff0c;以期为读者提供全面的认识。 公司可以监控员工电脑吗 答案是可以的&#xff0c;但需要遵守相关法律法规和公司的…

nbcio-boot登录后首页的跟踪出现total问题修正

nbcio-boot登录后出现的首页&#xff0c;页面跟踪的时候&#xff0c;出现堆total的出错&#xff0c;虽然不影响系统使用&#xff0c;但影响美观度&#xff0c;所以还是修正一下吧。 1、主要问题是下面的代码有问题 因为页面创建的时候&#xff0c;total数据获取不到&#xff0c…

贝叶斯滤波计算4d毫米波聚类目标动静属性

机器人学中有些问题是二值问题&#xff0c;对于这种二值问题的概率评估问题可以用二值贝叶斯滤波器binary Bayes filter来解决的。比如机器人前方有一个门&#xff0c;机器人想判断这个门是开是关。这个二值状态是固定的&#xff0c;并不会随着测量数据变量的改变而改变。就像门…

使用FFmpeg+ubuntu系统转化flac无损音频为mp3

功能需求如上题,我们来具体的操作一下: 1.先在ubuntu上面安装FFmpeg:sudo apt install ffmpeg 2.进入有flac音频文件的目录使用下述命令: ffmpeg -i test.FLAC -c:a libmp3lame -q:a 2 output.mp3 3.如果没有什么意外的话,你就能看到你的文件夹里面已经有转化好的mp3文件了 批…

【考研数学】高等数学第六模块 —— 空间解析几何(2,向量的应用)

文章目录 引言二、向量的应用2.1 平面2.2 直线2.3 特殊曲面2.3.1 旋转曲面2.3.2 柱面 2.4 距离2.5 夹角 写在最后 引言 承接前文&#xff0c;介绍完向量的基本概念与运算后&#xff0c;我们来看看向量有哪些应用。 二、向量的应用 2.1 平面 &#xff08;一&#xff09;平面的…