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

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

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

原题英文:Minimum Domino Rotations For Equal Row
难度:中等 | 标签:数组、贪心


1 题目重述

给定两行长度相同的多米诺骨牌:

  • tops[i] 表示第 i 张骨牌上面的数字;
  • bottoms[i] 表示第 i 张骨牌下面的数字。

你可以任选一些骨牌把它们翻转(即交换这一张牌的上下数字)。
请返回 最少需要翻转多少次,才能让 上面一行全部相等下面一行全部相等
如果无论怎么翻也做不到,返回 -1


2 解题思路

2.1 关键观察

  1. 候选数字只有 2 个
    假设最终能让某一行全部等于 x,那么 x 必定出现在第一张牌的上面或下面。
    因此我们只需要检验 tops[0]bottoms[0] 这两个数字即可。

  2. 一次扫描即可统计旋转次数
    对于候选数 x,我们同时统计:

    • rotateTop ——让 上排 都变成 x 需要翻多少次;
    • rotateBottom ——让 下排 都变成 x 需要翻多少次。
      遍历时若发现某张牌两面都不是 x,说明 x 不可能完成统一,直接失败即可。
  3. 答案 = 这两个候选数字的最小可行翻转数
    若两个候选都失败,则返回 -1

2.2 时间复杂度

我们只扫描两遍数组,时间 O(n),空间 O(1)


3 常见坑点

说明
把整条数组与数字比较bottoms == b 永远为 False,正确写法应为 bottoms[i] == b
忘记处理 0 次翻转if tmp: 会把 tmp == 0 的有效解过滤掉,应直接比较最小值
发现失败仍更新答案一旦遇到两面都不是候选数,应立即 return 而不是继续用临时统计结果更新全局答案

4 AC 代码(Python 3)

from typing import Listclass Solution:def minDominoRotations(self, tops: List[int], bottoms: List[int]) -> int:def check(x: int) -> int:""" 返回让某一行全变成 x 的最小翻转数;若不可行返回 inf """rot_top = rot_bot = 0for t, b in zip(tops, bottoms):if t != x and b != x:      # 这张牌两面都不是 x,不可行return float('inf')if t != x:                 # 让上排 = x 需翻一次rot_top += 1if b != x:                 # 让下排 = x 需翻一次rot_bot += 1return min(rot_top, rot_bot)cand = {tops[0], bottoms[0]}        # 只需检验这两个数ans = min(check(c) for c in cand)return -1 if ans == float('inf') else ans

5 个人踩坑记录

原始尝试(WA 78/84):

elif bottoms==b:   # 我把整个列表跟数字比了
  • Bug 1:比较对象写错导致第二个候选数统计永远失效。
  • Bug 2:遇到失败只把 tmp 置零然后 break,后面依旧用它去更新答案,错误写入了 res
  • Bug 3if tmp: 把 0 次翻转的情况漏掉。

修改这三处后一次 AC。


6 总结

  • 看到“让整行相等”这类题,第一步先想 “候选值能否极度缩小”;本题直接锁定两种数字。
  • 写多分支判断时务必小心 索引 vs 整体,这是数组题最易犯的错。
  • 当循环里一旦出现 判定失败条件,应及时 return,不要让无效结果继续污染后续逻辑。

感谢阅读,祝早日 AK LeetCode!
By @迪小莫学AI

http://www.xdnf.cn/news/3707.html

相关文章:

  • 动态规划-1137.第N个泰波那契数-力扣(LeetCode)
  • 【iview】es6变量结构赋值(对象赋值)
  • 【LLaMA-Factory实战】1.3命令行深度操作:YAML配置与多GPU训练全解析
  • 轻量级RTSP服务模块:跨平台低延迟嵌入即用的流媒体引擎
  • 从融智学视域快速回顾世界历史和主要语言文字最初历史证据(列表对照分析比较)
  • Vue实现成绩增删案例
  • C++ 中的继承
  • JSON 处理笔记
  • npm pnpm yarn 设置国内镜像
  • 数据库原理与应用实验二 题目七
  • PowerShell安装Chocolatey
  • 哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础
  • Python刷题:流程控制(下)
  • PowerPC架构详解:定义、应用及特点
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.1 数据库核心概念与PostgreSQL技术优势
  • C++负载均衡远程调用学习之 Dns-Route关系构建
  • 代码随想录算法训练营Day43
  • 超预期!淘宝闪购提前开放全国全量,联合饿了么扭转外卖战局
  • 美丽天天秒链动2+1源码(新零售商城搭建)
  • P4314 CPU 监控 Solution
  • YOLO旋转目标检测之ONNX模型推理
  • 上位机知识篇---粗细颗粒度
  • P2415集合求和 题解
  • 【Java IO流】字符输入流FileReader、字符输出流FileWriter
  • C++ 动态内存管理详讲
  • 【Java IO流】字节输入流FileInputStream、字节输出流FileOutputStream
  • ICRA 2025 基于触觉反馈的闭环分层控制框架——开放环境下通用门开启的智能规划与操作
  • 【unity游戏开发入门到精通——UGUI】实现精准点击异形或者不规则图片button按钮
  • 字符串的相关方法
  • 【黑马JavaWeb+AI知识梳理】后端Web基础02 - Web基础