OJ-1014田忌赛马
示例1:
输入
11 8 20
10 13 7
输出
1
示例2:
输入
11 12 20
10 13 7
输出
2
示例3:
输入
1 2 3
4 5 6
输出
6
解题思路:
问题的关键在于调整数组a的顺序,使得尽可能多的a[i] > b[i]。为了达到最优结果,我们可以采用贪心的策略。具体思路如下:
1.首先,将数组a按照从大到小的顺序排序。
2.对于数组b,我们需要找到与每个b[i]相对应的最小的a[j],使得a[j]>b[i]。为了实现这一点,我们可以采用二分查找,找到a中第一个大于b[i]的数字的索引。
3.如果找到了对应的a[j],则将a[j]标记为已使用,并继续处理下一个b[i]。
4.如果没有找到对应的a[j],说明当前的b[i]无法找到满足条件的a[j],则尝试找下一个b[i+1]对应的a[j]。
5·重复以上步骤,直到处理完所有的b[i]。
最后,统计所有满足条件的a数组排列的数量即可。这样的贪心策略能够保证尽可能多的a[i]> b[i]。
在实际实现中,可以使用递归或迭代的方式来生成所有可能的a数组排列,然后根据上述贪心策略进行筛选。最终输出满足条件的a数组排列的数量。
优化:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class 田忌赛马 {static Map<Integer, Integer> cnts = new HashMap<>();static int[] a;static int[] b;static int n;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);a = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();b = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();n = a.length;boolean[] st = new boolean[n];int[] nums = new int[n];dfs(0, st, nums);int maxcnt = 0;for (int k : cnts.keySet()) {if (k > maxcnt) {maxcnt = k;}}System.out.println(cnts.get(maxcnt));}private static void dfs(int u, boolean[] st, int[] nums) {if (u == n) {int cnt = 0;for (int i = 0; i < n; i++) {if (nums[i] > b[i]) {cnt += 1;}}cnts.put(cnt, cnts.getOrDefault(cnt, 0) + 1);return;}for (int i = 0; i < n; i++) {if (st[i]) continue;st[i] = true;nums[u] = a[i];dfs(u + 1, st, nums);st[i] = false;}}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;public class 田忌赛马 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List<Integer> a = new ArrayList<>();List<Integer> b = new ArrayList<>();String[] s1 = scanner.nextLine().split(" ");String[] s2 = scanner.nextLine().split(" ");for (int i = 0; i < s1.length; i++) {a.add(Integer.parseInt(s1[i]));b.add(Integer.parseInt(s2[i]));}// 对列表a进行排序Collections.sort(a);int n = a.size();boolean[] st = new boolean[n];int[] nums = new int[n];Map<Integer, Integer> cnts = new HashMap<>();// 调用深度优先搜索函数dfs(0, a, b, st, nums, cnts);int maxcnt = 0, maxnum = cnts.getOrDefault(0, 0);// 寻找最大的相同数字数量和对应的排列情况数量for (Map.Entry<Integer, Integer> entry : cnts.entrySet()) {int k = entry.getKey();int v = entry.getValue();if (k > maxcnt) {maxcnt = k;maxnum = v;}}// 输出最大的相同数字数量System.out.println(maxnum);}// 定义深度优先搜索函数private static void dfs(int u, List<Integer> a, List<Integer> b, boolean[] st, int[] nums, Map<Integer, Integer> cnts) {// 如果已经遍历完所有数字,进行统计if (u == a.size()) {int cnt = 0;for (int i = 0; i < a.size(); i++) {if (nums[i] > b.get(i)) {cnt += 1;}}cnts.put(cnt, cnts.getOrDefault(cnt, 0) + 1);return;}// 遍历数字进行排列for (int i = 0; i < a.size(); i++) {// 如果当前数字已经被选择或者当前数字和前一个数字相同,做一个去重操作if (st[i] || (i > 0 && a.get(i).equals(a.get(i - 1)) && st[i - 1])) {continue;}st[i] = true;nums[u] = a.get(i);dfs(u + 1, a, b, st, nums, cnts);st[i] = false;}}
}
253.【华为OD机试】田忌赛马(贪心算法-Java&Python&C++&JS实现)_python 田忌赛马 华为od-CSDN博客
相关文章:
OJ-1014田忌赛马
示例1: 输入 11 8 20 10 13 7 输出 1 示例2: 输入 11 12 20 10 13 7 输出 2 示例3: 输入 1 2 3 4 5 6 输出 6 解题思路: 问题的关键在于调整数组a的顺序,使得尽可能多的a[i] > b[i]。为了达到最优结果,我们可以采用贪心的策…...
Excel重新踩坑3:条件格式;基本公式运算符;公式中的单元格引用方式;公式菜单栏其他有用的功能说明;
0、前言:以下内容是学习excel公式的基础内容。 1、需求:将表格特定区域中数值大小大于等于30,小于等于80的单元格,颜色填充为红色,大于80的,颜色填充为黄色。 新建规则之后也可以通过该功能清除规则。 2、基…...
【AI知识点】FAISS如何提高检索效率?
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 FAISS(Facebook AI Similarity Search) 是一个高效的相似度搜索库,专门设计用于处理大规模的向量检索任务,尤其是在稠密向量的检索中表现出色。FAISS 能够显著提高检索效率…...
【Git】Gitlab进行merge request的时候,出现待合并分支合并了主分支的问题的解决
最近在公司开始用merge request进行代码合并了。 然后不知道为啥,如果待合并分支(A)进行merge request到主分支(B)的时候,如果A和B有冲突,然后我在gitlab上使用页面进行冲突的解决,比…...
jetson nano ubuntu20.04安装ros-Noetic
jetson nano ubuntu20.04 安装ros-Noetic 一. 初始准备nano连接wifinano网络配置二. 查看系统版本三. 开始安装1. 移除不需要的 amd64 架构2. 配置软件源3.安装 ROS Melodic`4. 解决 rosdep update报错`一. 初始准备 nano连接wifi nano网络配置 二. 查看系统版本 lsb_relea…...
【数据结构与算法】走进数据结构的“时间胶囊”——栈
大家好,我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…...
伺服增量式和绝对式的本质区别?
伺服增量式和绝对式的本质区别? 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。以转动时输出脉冲,通过计数设备来知道其位置,当编码器不动或停电时,…...
应对 .DevicData-X-XXXXXXXX 勒索病毒:防御与恢复策略
引言 随着信息技术的快速发展,网络安全问题愈发严峻。勒索病毒作为一种恶性网络攻击手段,已成为企业和个人面临的重大威胁之一。尤其是 .DevicData-X-XXXXXXXX 勒索病毒,其通过加密用户数据并勒索赎金,给受害者带来了巨大的经济损…...
【代码随想录——数组——二刷】
数组 1. 二分查找(704) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 1.1 二分法的第一种写法 我们定义 target 是在…...
spring-boot(4)
1.VueRouter安装与使用 2.状态管理VueX 3. 4. 5. 6....
深度学习模型:原理、架构与应用
深度学习(Deep Learning)是机器学习中的一个分支,基于人工神经网络的发展,尤其是多层神经网络的研究,使其在语音识别、图像处理、自然语言处理等领域取得了显著进展。深度学习的核心是通过大量数据的训练,学习到数据的内在结构和模式,并且具备自动从复杂的输入中提取特征…...
玩客云Armbian安装Casaos
#armbian安装docker apt install docker.io #armbian判断docker是否正常运行 systemctl status docker #查看版本 docker version #安装casaos方式一 wget -qO- https://get.casaos.io | bash #安装casaos方式二 curl -fsSL https://get.casaos.io | bash...
redis过期提醒
文章目录 redis过期提醒 redis过期提醒 有一次看redis的配置文件发现一个notify-keyspace-events配置,注释里边长篇大论的,那我得看看这是干啥的,看完注释内容,发现不得了了,redis竟然还有过期提醒的功能 接下来得大…...
AnaTraf | 提升网络性能:深入解析网络关键指标监控、TCP重传与TCP握手时间
AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在当今的数字化时代,网络的稳定性和性能对企业的运营效率至关重要。无论是内部通信、应用程序的运行,还是对外提供服务,网络都发挥着关键作用。对于网络工程师或IT运维人员…...
黑盒测试和白盒测试的具体方法(附加实际应用中的技巧和注意事项)
黑盒测试的具体方法 黑盒测试有多种具体的方法,以下是几种常见的黑盒测试技术: 等价类划分 定义:将输入数据划分为若干等价类,每个等价类中的数据被认为是等效的。目的:减少测试用例数量,同时覆盖所有可…...
基于ssm的小区物业管理系统
文未可获取一份本项目的java源码和数据库参考。 题目简介: 我国物权法的颁布以及经济的快速发展进一步提升了社区居民对物业服务和物业管理的要求,特别是对于社区安全、社区停车以及社区维修等各个方面提出了更为严格的要求。在这种背景下社区物业必须…...
4本SCI/SSCI期刊更名,10月WOS更新!速看!
期刊动态 2024年10月科睿唯安期刊目录更新 2024年10月22日,科睿唯安更新了WOS期刊目录,此次更新,期刊被编辑除名11本,停止出版1本,4本更名,停产1本,新增63本。 剔除期刊 11本期刊被剔 Enginee…...
麒麟v10系统安装docker镜像
最近把系统搞崩了,又重新安装了一个麒麟系统,yum更新发现不能安装docker,所以这里给出一个安装教程,分享出来,让大家少走弯路: # 配置阿里云 Centos8 镜像源,需要额外的一些依赖,而…...
基于SSM大学校医院信息管理系统的设计
管理员账户功能包括:系统首页,个人中心,校医管理,用户管理,在线问诊管理,线上挂号管理,病例记录管理,系统管理 校医账号功能包括:系统首页,个人中心…...
【JS】如何识别一个变量是不是数组对象
文章目录 1. Array.isArray()语法示例 2. Object.prototype.toString.call()语法示例 3. instanceof 操作符语法示例 4. 检查 constructor属性语法示例 总结 在 JavaScript 中,有几种方法可以用来识别一个变量是否是数组对象。以下是一些常用的方法: 1. …...
5分钟掌握:billd-desk跨平台远程控制高效解决方案
5分钟掌握:billd-desk跨平台远程控制高效解决方案 【免费下载链接】billd-desk 基于Vue3 WebRTC Nodejs Flutter搭建的远程桌面控制 项目地址: https://gitcode.com/gh_mirrors/bi/billd-desk 还在为远程办公的卡顿和限制而烦恼吗?当你急需远程…...
Phi-3-mini-4k-instruct-gguf多场景:覆盖个人提效、团队协作、客户支持全链路
Phi-3-mini-4k-instruct-gguf多场景:覆盖个人提效、团队协作、客户支持全链路 1. 认识Phi-3-mini-4k-instruct-gguf Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个开箱即用的工具特别适合处理日常工作中的文本任务,…...
2026年Win11强力清理工具推荐:安全无广告的C盘瘦身软件怎么选?
我是个学生党,笔记本电脑的C盘从买回来就没清理过,最近装新游戏时直接提示空间不足。网上搜“Win11强力清理工具推荐”,跳出来一堆软件,看着都挺好,但又怕下载到带捆绑、弹广告的流氓软件。我只是想要一个能真正把C盘腾…...
抖音无水印视频批量下载全攻略:技术解析与实战指南
抖音无水印视频批量下载全攻略:技术解析与实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...
用Python的igraph和leidenalg搞定知识图谱布局:一个科研领域的可视化实战
科研知识图谱实战:用PythonLeiden算法揭示学科交叉规律 当你在文献海洋中寻找研究方向时,是否曾被复杂的学科交叉关系困扰?传统的关键词共现分析已经不能满足现代科研的需求。本文将带你用Python的igraph和leidenalg构建一个能自动识别学科社…...
逆向工程实战:如何用dbcc解析第三方CAN协议(含自定义结构体改造技巧)
逆向工程实战:用dbcc深度解析非标CAN协议与结构体改造技巧 在汽车电子和工业控制领域,CAN总线协议逆向分析是一项极具挑战性的工作。面对没有文档说明的第三方设备或商用车辆黑盒协议,工程师常常需要从原始数据流中重建通信逻辑。本文将深入探…...
如何用Nucleus Co-Op实现本地多人游戏:5个维度解析开源工具的技术突破与应用价值
如何用Nucleus Co-Op实现本地多人游戏:5个维度解析开源工具的技术突破与应用价值 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 当你和…...
手把手教你用Arm Cortex-A715手册:从RAS到调试,一份给芯片设计者的实战笔记
Cortex-A715实战指南:芯片设计者的RAS与调试技术精要 在当今高性能计算领域,Arm Cortex-A715处理器核心凭借其卓越的能效比和性能表现,已成为众多芯片设计项目的首选。本文将从工程实践角度,深入剖析Cortex-A715的两个关键子系统&…...
用.NET 6+和secs4net快速搭建半导体设备通信主机(附完整代码示例)
基于.NET 6与secs4net构建半导体设备通信主机的实战指南 在半导体制造领域,设备间的高效通信是自动化生产线的核心需求。SECS/GEM协议作为行业标准,为设备与主机系统间的数据交换提供了可靠框架。本文将展示如何利用.NET 6平台和secs4net库快速搭建功能完…...
ofa_image-caption算力适配:A10G云GPU上稳定运行的最小配置方案
ofa_image-caption算力适配:A10G云GPU上稳定运行的最小配置方案 1. 引言 如果你正在寻找一个能自动为图片生成英文描述的本地工具,并且希望它能在消费级显卡上流畅运行,那么基于OFA模型的图像描述生成工具很可能就是你的答案。这个工具最大…...
