友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
822. 翻转卡片游戏
在桌子上有 n 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。
我们可以先翻转任意张卡片,然后选择其中一张卡片。
如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。
哪个数是这些想要的数字中最小的数(找到这些数中的最小值)呢?如果没有一个数字符合要求的,输出 0。
其中, fronts[i] 和 backs[i] 分别代表第 i 张卡片的正面和背面的数字。
如果我们通过翻转卡片来交换正面与背面上的数,那么当初在正面的数就变成背面的数,背面的数就变成正面的数。
示例 1:
输入:fronts = [1,2,4,4,7], backs = [1,3,4,1,3] 输出:2 解释:假设我们翻转第二张卡片,那么在正面的数变成了 [1,3,4,4,7] , 背面的数变成了 [1,2,4,1,3]。 接着我们选择第二张卡片,因为现在该卡片的背面的数是 2,2 与任意卡片上正面的数都不同,所以 2 就是我们想要的数字。
示例 2:
输入:fronts = [1], backs = [1] 输出:0 解释: 无论如何翻转都无法得到想要的数字,所以返回 0 。
提示:
-
n == fronts.length == backs.length -
1 <= n <= 1000 -
1 <= fronts[i], backs[i] <= 2000
思路分析
首先,排除的是正反面一样的数字。剩下的数字里,找最小的数字即可。有点想复杂了。
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-07-15 22:52:49
*/
public int flipgame(int[] fronts, int[] backs) {
Set<Integer> set = new HashSet<>();
for (int i = 0; i < fronts.length; i++) {
if (fronts[i] == backs[i]) {
set.add(fronts[i]);
}
}
int result = Integer.MAX_VALUE;
for (int front : fronts) {
if (!set.contains(front)) {
result = Math.min(result, front);
}
}
for (int back : backs) {
if (!set.contains(back)) {
result = Math.min(result, back);
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}

