文章目录

  • 1. 题目
  • 2. 解题

1. 题目

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

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

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

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

示例 1:

输入:A = [2,1,2,4,2,2], B = [5,2,6,2,3,2]
输出:2
解释:
图一表示:在我们旋转之前, A 和 B 给出的多米诺牌。
如果我们旋转第二个和第四个多米诺骨牌,
我们可以使上面一行中的每个值都等于 2,如图二所示。示例 2:
输入:A = [3,5,1,2,3], B = [3,6,3,3,4]
输出:-1
解释:
在这种情况下,不可能旋转多米诺牌使一行的值相等。提示:
1 <= A[i], B[i] <= 6
2 <= A.length == B.length <= 20000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-domino-rotations-for-equal-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 找出数量 >= n 的数 x
  • 检查每个位置的两个数:
  1. 都等于 x 无需调换,记录次数 r2
  2. 都不等于 x ,不满足题意
  3. 有一个等于 x,记录旋转次数 r1
    答案是 min⁡(r1,n−r2−r1)\min(r1, n-r2-r1)min(r1,n−r2−r1)
class Solution {public:int minDominoRotations(vector<int>& A, vector<int>& B) {int n = A.size();vector<int> count(7, 0);for(int i = 0; i < n; i++) {count[A[i]]++;//计数count[B[i]]++;}int num = -1;for(int i = 1; i <= 6; ++i){if(count[i] >= n)//个数达标的数num = i;}if(num == -1)return -1;int rotation = 0, notrotation = 0;for(int i = 0; i < n; ++i){if(A[i] == num && B[i] == num)notrotation++;//两个都是,不需要交换else if(A[i] != num && B[i] != num)return -1;//都不等,不存在else if(A[i] == num)rotation++;}return min(rotation, n-notrotation-rotation);}
};

304 ms 100.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1007. 行相等的最少多米诺旋转相关推荐

  1. [leetcode]1007. 行相等的最少多米诺旋转

    在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分.(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 -- 该平铺的每一半上都有一个数字.) 我们可以旋 ...

  2. leetcode1007. 行相等的最少多米诺旋转(贪心)

    在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分.(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 -- 该平铺的每一半上都有一个数字.) 我们可以旋 ...

  3. leetcode 838. Push Dominoes | 838. 推多米诺(分析每个状态)

    题目 https://leetcode.com/problems/push-dominoes/ 题解 很有趣的一道题,不难,L R 的状态组合是有限的,只要分析出每个状态应该怎么处理,然后模拟就好了. ...

  4. LeetCode 790. 多米诺和托米诺平铺(动态规划)

    文章目录 1. 题目 2. 解题 1. 题目 有两种形状的瓷砖: 一种是 2x1 的多米诺形, 另一种是形如 "L" 的托米诺形. 两种形状都可以旋转. XX <- 多米诺X ...

  5. LeetCode 838. 推多米诺(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相 ...

  6. LeetCode 1128. 等价多米诺骨牌对的数量(哈希)

    1. 题目 给你一个由一些多米诺骨牌组成的列表 dominoes. 如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的. 形式上,dominoe ...

  7. Leetcode 838. 推多米诺 C++

    Leetcode 838. 推多米诺 题目 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻 ...

  8. LeetCode 790. 多米诺和托米诺平铺

    LeetCode 790. 多米诺和托米诺平铺 一.题目(经典动态规划) 二.解题思路 1. 铺满2*N面积: 2. 对于第i列,有4种情况: 3. N-1 -> N 转移方程: 三.核心代码 ...

  9. Leetcode #790 多米诺和托米诺平铺

    有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- "L" 托米诺 ...

最新文章

  1. 优惠劵系统库存设计浅谈
  2. discuz7记录下url静态化的apache2.2配置
  3. web前端响应式布局,自适应全部分辨率
  4. 设计模式笔记之五:观察者模式
  5. EL表达式取Map,List值的总结
  6. Python 实现数据结构中的单链表,循环单链表,双链表
  7. 别人统一四大力学,吾统一四大布局方向
  8. visio2003字号与word中的字号对应关系
  9. WZOI.CC基础题库答案向导
  10. 金蝶K3系统与防火墙集成部署方案
  11. python实现英文新闻摘要自动提取_“关键字”法完成新闻摘要提取
  12. 累计观看5.5亿+,盛世华诞,云上直播随地看
  13. 多协议充电桩平台系统小程序方案
  14. 为什么选择嵌入式方向
  15. 可以免费批量Excel转PDF的在线转换工具
  16. CANVAS drawImage 绘图图片模糊已解决
  17. 为什么独热编码会引起维度诅咒,以及避免他的几个办法
  18. 为什么餐厅老是没人光临?快试试全息投影餐厅
  19. ftp上传 防火墙的设置
  20. 互联互通社区祝大家中秋节快乐!

热门文章

  1. python常用快捷键、写代码事半功倍_Pycharm常用快捷键总结及配置方法
  2. php 计算数据偏离度,关于偏离度的测算方法
  3. java的安装和配置
  4. 死锁产生的原因及条件、如何避免死锁
  5. Linux设备驱动模型1——简介和底层架构
  6. jmeter+WebDriver:启动浏览器进行web自动化
  7. 解决模拟MOSS用户调用WebService打开个人站点进行操作
  8. 腾讯云挂在和格式化数据盘
  9. centos安装Python2.7
  10. .net中如何发送HTTP请求网络资源