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

1007. 行相等的最少多米诺旋转

题目链接

1007. 行相等的最少多米诺旋转 - 力扣(LeetCode)

题目描述

在一排多米诺骨牌中,tops[i]bottoms[i]分别代表第i个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。)

我们可以旋转第i张多米诺,使得tops[i]bottoms[i]的值交换。

返回能使tops中所有值或者bottoms中所有值都相同的最小旋转次数。

如果无法做到,返回-1.

题目示例

示例 1 :

输入:tops = [2,1,2,4,2,2], bottoms = [5,2,6,2,3,2] 输出:2 解释: 图一表示:在我们旋转之前, tops 和 bottoms 给出的多米诺牌。 如果我们旋转第二个和第四个多米诺骨牌,我们可以使上面一行中的每个值都等于 2,如图二所示。

示例 2 :

输入:tops = [3,5,1,2,3], bottoms = [3,6,3,3,4] 输出:-1 解释: 在这种情况下,不可能旋转多米诺牌使一行的值相等。

解题思路

  1. 问题描述
    • 给定两排长度相同的多米诺骨牌(topsbottoms数组)。
    • 每次旋转可以将一个骨牌的上下数字交换。
    • 目标是通过最少次数的旋转,使得某一排的所有数字相同。
    • 如果无法实现,返回-1。
  2. 关键观察
    • 最终统一的数字只能是tops[0]bottoms[0]中的一个(因为第一个骨牌必须参与统一)。
    • 对于候选数字targettops[0]bottoms[0]),需要检查所有骨牌是否至少有一个数字等于target
    • 对于每个骨牌:
      • 如果上半不等于target,则需要将下半旋转到上半(toTop++)。
      • 如果下半不等于target,则需要将上半旋转到下半(toBottom++)。
      • 如果都不等于target,则直接失败。
  3. 算法选择
    • 尝试两种候选数字:tops[0]bottoms[0]
    • 对于每种候选数字,统计需要旋转到上半或下半的次数,取较小值。
    • 如果两种候选都失败,返回-1。

题解代码

classSolution{publicintminDominoRotations(int[]tops,int[]bottoms){// 尝试让所有骨牌上半或下半都变成tops[0]或bottoms[0]所需的最小旋转次数intans=Math.min(minRot(tops,bottoms,tops[0]),// 尝试让所有上半变成tops[0]minRot(tops,bottoms,bottoms[0])// 尝试让所有上半变成bottoms[0]);// 如果两种尝试都失败,返回-1returnans==Integer.MAX_VALUE?-1:ans;}privateintminRot(int[]tops,int[]bottoms,inttarget){inttoTop=0;// 需要旋转到上半的次数inttoBottom=0;// 需要旋转到下半的次数for(inti=0;i<tops.length;i++){intx=tops[i];inty=bottoms[i];// 如果当前骨牌的两个数字都不等于target,无法完成if(x!=target&&y!=target){returnInteger.MAX_VALUE;}// 如果上半不等于target,需要旋转下半到上半if(x!=target){toTop++;}// 如果下半不等于target,需要旋转上半到下半elseif(y!=target){toBottom++;}// 如果x和y都等于target,不需要旋转}// 返回两种旋转方式中的较小值returnMath.min(toTop,toBottom);}}

复杂度分析

  1. 时间复杂度
    • 遍历数组两次(分别尝试tops[0]bottoms[0]),每次遍历长度为n
    • 总时间复杂度:O(n)
  2. 空间复杂度
    • 仅使用常数空间(几个变量)。
    • 总空间复杂度:O(1)
http://www.jsqmd.com/news/695749/

相关文章:

  • Morefine M600 6900HX迷你主机深度评测与性能分析
  • 智能体设计模式:从基础架构到实战优化
  • 2026年q2瓷砖胶十大品牌盘点:瓷砖胶十大名牌,瓷砖胶口碑排行,瓷砖胶品牌价格,十大瓷砖胶品牌,优选推荐! - 优质品牌商家
  • ESP8266的AT固件选型与升级指南:告别指令不响应,刷对固件事半功倍
  • 多元微积分核心概念与Python实践指南
  • 别再乱接MOS管了!手把手教你用S-8254A搭建4串锂电池保护板(附PCB布局避坑指南)
  • BERT模型解析:原理、变种与实践指南
  • R语言逻辑控制与函数编程实战指南
  • 2026年四川剪刀楼梯技术分享:高性价比厂家TOP5解析 - 优质品牌商家
  • 2026年比较好的沈阳政企高效搬家公司专业服务榜 - 品牌宣传支持者
  • 情绪化AI测试方法论:面向软件测试从业者的专业探索与实践路径
  • 基于无迹扩展卡尔曼滤波的路面附着系数估计系统:适用于Matlab Simulink的整车动力学...
  • 沈阳想找个飞书培训机构怎么找?
  • 2026年3月研究生融合门户操作手册推荐,一站式网上办事大厅/科研管理系统/融合门户/一网通办平台,融合门户方案多少钱 - 品牌推荐师
  • 2026年3月知名的数字人矩阵系统企业推荐,数字人矩阵/ai优化/抖音视频矩阵系统/GEO优化,数字人矩阵系统厂家哪家好 - 品牌推荐师
  • 2026年3月目前盘式干燥机实力厂家,干燥机/闪蒸干燥机/热风循环烘箱/盘式干燥机,盘式干燥机批发厂家选哪家 - 品牌推荐师
  • Stacking集成学习:提升机器学习模型性能的实战技巧
  • ExplorerPatcher深度解析:5个核心功能让Windows 11重获经典体验
  • Photoshop脚本开发入门:从看懂一个‘秋色效果’插件源码开始
  • 别再写(1<<63)了!详解C语言整数常量后缀与跨平台移植那些事儿
  • 2026年热门的沈阳政企高效搬家公司诚信商家榜 - 行业平台推荐
  • Day101112
  • 从收音机到蓝牙音箱:三极管功放电路的前世今生与实战避坑指南
  • 企业级WLAN部署与安全优化实战指南
  • 租房水电自动核算程序,表计数据上链,按用量自动结算,避免房东乱加价,数据造假。
  • 如何突破《原神》帧率限制:genshin-fps-unlocker深度技术解析与实战指南
  • 设计师必看:搞懂CMYK和RGB的区别,别再让印刷出来的颜色“翻车”了!
  • 告别模拟器:如何在Windows上轻松安装安卓应用的终极指南
  • 2026电商客服外包专业度拆解:核心维度与靠谱选型逻辑 - 优质品牌商家
  • OpenClaw 压缩包解压规范,避免部署出错完整注意事项