# 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.pswp.cn/news/904058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904058.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據技術:從趨勢到變革的全景探索

??個人主頁??:一ge科研小菜雞-CSDN博客 ????期待您的關注 ???? 在數字化時代的浪潮下,大數據已經不再是一個陌生的概念。從日常生活中的社交媒體,到企業決策支持系統,再到公共管理的大數據應用,它正在改變著我們的工作和生活方式。隨著技術的進步,傳統的數據…

前端八股Day5——XHS某中廠實習前端一面

沒寫完,睡醒補 CSS盒模型 //出現頻率好高,感覺每次寫面經都遇到 W3C標準盒模型(content-box):盒子寬高width/heightpaddingbordermargin IE怪異盒模型(border-box):盒子寬高width/heigth(包括padding和border)margin 默認標準切換…

INP指標

什么是INP(Interaction to Next Paint) 參考網站:webVital-INP文檔 定義與核心目標 INP 是一項穩定的 Core Web Vitals 指標,通過統計用戶訪問期間所有符合條件的互動約定時間,評估網頁對用戶操作的總體響應能力。最…

剖析擴散模型(Denoising Diffusion Probabilistic Models)

文章目錄 1. 前言2. 前向擴散過程(Forward Diffusion)3. 反向生成過程(Reverse Process)4. 訓練和推理過程中的偽代碼5. 訓練過程代碼實現(Training)5.1 時間嵌入模塊——TimeEmbedding5.2 前向擴散過程——GaussianDiffusionTrai…

基于 Spring Boot 瑞吉外賣系統開發(九)

基于 Spring Boot 瑞吉外賣系統開發(九) 保存菜品 菜品管理頁面提供了一個“新增菜品”按鈕,單擊該按鈕時,會打開新增菜品頁面。 請求路徑/dish,請求方法POST,參數使用DishDto類接收。 DishDto 添加f…

w317汽車維修預約服務系統設計與實現

🙊作者簡介:多年一線開發工作經驗,原創團隊,分享技術代碼幫助學生學習,獨立完成自己的網站項目。 代碼可以查看文章末尾??聯系方式獲取,記得注明來意哦~🌹贈送計算機畢業設計600個選題excel文…

【Agent搭建】利用coze平臺搭建一個AI銷售?

目錄 一、關于coze 核心功能 二、搭建屬于你自己智能體 備注:(以下說明比較需要調整的板塊) 1、從Prompt工程開始 2、搭建工作流 3、添加知識 三、總結 一、關于coze Coze是字節跳動推出的AI應用開發平臺,專注于幫助用戶快速…

Sharding-JDBC分庫分表中的熱點數據分布不均勻問題及解決方案

引言 在現代分布式應用中,使用Sharding-JDBC進行數據庫的分庫分表是提高系統性能和擴展性的常見策略。然而,在實際應用中,某些特定的數據(如最新訂單、熱門商品等)可能會成為“熱點”,導致這些部分的數據處…

DSP48E2 的 MAC模式功能仿真

DSP48E2 仿真代碼: 測試的功能為 P i ( A D ) ? B P i ? 1 P_{i} (AD) * B P_{i-1} Pi?(AD)?BPi?1? timescale 1ns / 1nsmodule dsp_tb;// 輸入reg CLK;reg CE;reg SCLR;reg signed [26:0] A, D;reg signed [17:0] B;// 輸出wire signed [47:0] P;par…

抽象工廠模式(Abstract Factory Pattern)

很好!你現在已經開始接觸設計模式了,而**抽象工廠模式(Abstract Factory Pattern)是一種常用于“創建一系列相關產品”**的經典設計模式。 我會一步步幫你理解: 🧠 一句話解釋 抽象工廠模式:提…

Thymeleaf模板引擎從入門到實戰:Spring Boot整合與核心用法詳解

在 Java Web 開發的世界里,模板引擎是連接后端數據與前端展示的重要橋梁。Thymeleaf 憑借其強大的功能和簡潔的語法,逐漸成為眾多開發者的首選。如果你正在尋找一款能夠讓你的 Web 應用開發更加高效、代碼更加優雅的模板引擎,那么 Thymeleaf …

【HarmonyOS】作業三 UI

目錄 一. 單選題(共10題,10分) 1. (單選題, 1分)關于Tabs組件頁簽的位置設置,下面描述錯誤的是 2. (單選題, 1分)下面哪個組件不能包含子組件? 3. (單選題, 1分)ArkTS語言的實現計數器功能的組件名稱是以下哪個? 4. (單選題…

《算法筆記》10.6小節——圖算法專題->拓撲排序 問題 C: Legal or Not

題目描述 ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When so…

博客信息管理/博客管理

🛠 博客管理模塊:設計建議 你應該以To B 的后臺系統思路來設計,但保持簡單、輕量級、自己易維護是關鍵。下面是針對你這個場景的建議。 🧱 前端頁面結構(React/Vue 可用) 頁面 說明 博客列表頁 展示所有博…

全平臺開源即時通訊IM框架MobileIMSDK:7端+TCP/UDP/WebSocket協議,鴻蒙NEXT端已發布,5.7K Stars

一、基本介紹 MobileIMSDK是一套全平臺原創開源IM通信層框架: 超輕量級、高度提煉,lib包50KB以內;精心封裝,一套API同時支持UDP、TCP、WebSocket三種協議(可能是全網唯一開源的);客戶端支持iOS…

SpringBoot商城平臺系統設計與開發

概述 SpringBoot商城平臺系統實現了商品展示、購物車、訂單管理等商城核心功能,適合作為計算機專業設計項目或商城項目開發參考,實現商城平臺的核心功能,學習商品管理、訂單處理、支付集成等關鍵技術實現。 主要內容 1. 前臺用戶功能模塊 …

【網絡原理】深入理解HTTPS協議

本篇博客給大家帶來的是網絡原理的知識點, 由于時間有限, 分三天來寫, 本篇為線程第三篇,也是最后一篇. 🐎文章專欄: JavaEE初階 🚀若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動…

【C語言練習】018. 定義和初始化結構體

018. 定義和初始化結構體 018. 定義和初始化結構體1. 定義結構體示例1:定義一個簡單的結構體輸出結果2. 初始化結構體示例2:在聲明時初始化結構體輸出結果示例3:使用指定初始化器初始化結構體(C99及以上標準支持)輸出結果3. 結構體數組示例4:定義和初始化結構體數組輸出結…

3D版同步幀游戲

以下是實現一個3D版同步幀游戲的詳細步驟與完整代碼示例。我們將以第一人稱射擊游戲(FPS)為原型,重點講解3D空間中的同步機制優化。 項目升級:3D版核心改動 1. 3D坐標系與消息結構 // common/messages.go type Vector3 struct {X float32 `json:"x"`Y float32 `…

卷積神經網絡進化史:從LeNet-5到現代架構的完整發展脈絡

摘要 本文系統梳理卷積神經網絡(CNN)從誕生到繁榮的發展歷程。從1998年Yann LeCun開創性的LeNet-5出發,重點解析2012年引爆深度學習革命的AlexNet,并詳細拆解后續演進的五大技術方向:網絡深度化(VGG)、卷積功能強化(ResNet)、檢測任務遷移(F…