LeetCode 1007. 行相等的最少多米诺旋转
文章目录
- 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
- 检查每个位置的两个数:
- 都等于 x 无需调换,记录次数 r2
- 都不等于 x ,不满足题意
- 有一个等于 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. 行相等的最少多米诺旋转相关推荐
- [leetcode]1007. 行相等的最少多米诺旋转
在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分.(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 -- 该平铺的每一半上都有一个数字.) 我们可以旋 ...
- leetcode1007. 行相等的最少多米诺旋转(贪心)
在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分.(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 -- 该平铺的每一半上都有一个数字.) 我们可以旋 ...
- leetcode 838. Push Dominoes | 838. 推多米诺(分析每个状态)
题目 https://leetcode.com/problems/push-dominoes/ 题解 很有趣的一道题,不难,L R 的状态组合是有限的,只要分析出每个状态应该怎么处理,然后模拟就好了. ...
- LeetCode 790. 多米诺和托米诺平铺(动态规划)
文章目录 1. 题目 2. 解题 1. 题目 有两种形状的瓷砖: 一种是 2x1 的多米诺形, 另一种是形如 "L" 的托米诺形. 两种形状都可以旋转. XX <- 多米诺X ...
- LeetCode 838. 推多米诺(模拟)
文章目录 1. 题目 2. 解题 1. 题目 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相 ...
- LeetCode 1128. 等价多米诺骨牌对的数量(哈希)
1. 题目 给你一个由一些多米诺骨牌组成的列表 dominoes. 如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的. 形式上,dominoe ...
- Leetcode 838. 推多米诺 C++
Leetcode 838. 推多米诺 题目 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻 ...
- LeetCode 790. 多米诺和托米诺平铺
LeetCode 790. 多米诺和托米诺平铺 一.题目(经典动态规划) 二.解题思路 1. 铺满2*N面积: 2. 对于第i列,有4种情况: 3. N-1 -> N 转移方程: 三.核心代码 ...
- Leetcode #790 多米诺和托米诺平铺
有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- "L" 托米诺 ...
最新文章
- 优惠劵系统库存设计浅谈
- discuz7记录下url静态化的apache2.2配置
- web前端响应式布局,自适应全部分辨率
- 设计模式笔记之五:观察者模式
- EL表达式取Map,List值的总结
- Python 实现数据结构中的单链表,循环单链表,双链表
- 别人统一四大力学,吾统一四大布局方向
- visio2003字号与word中的字号对应关系
- WZOI.CC基础题库答案向导
- 金蝶K3系统与防火墙集成部署方案
- python实现英文新闻摘要自动提取_“关键字”法完成新闻摘要提取
- 累计观看5.5亿+,盛世华诞,云上直播随地看
- 多协议充电桩平台系统小程序方案
- 为什么选择嵌入式方向
- 可以免费批量Excel转PDF的在线转换工具
- CANVAS drawImage 绘图图片模糊已解决
- 为什么独热编码会引起维度诅咒,以及避免他的几个办法
- 为什么餐厅老是没人光临?快试试全息投影餐厅
- ftp上传 防火墙的设置
- 互联互通社区祝大家中秋节快乐!