class Solution {
public:
int flipgame(vector<int>& fronts, vector<int>& backs) {
}
};
822. 翻转卡片游戏
在桌子上有 N
张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。
我们可以先翻转任意张卡片,然后选择其中一张卡片。
如果选中的那张卡片背面的数字 X
与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。
哪个数是这些想要的数字中最小的数(找到这些数中的最小值)呢?如果没有一个数字符合要求的,输出 0。
其中, fronts[i]
和 backs[i]
分别代表第 i
张卡片的正面和背面的数字。
如果我们通过翻转卡片来交换正面与背面上的数,那么当初在正面的数就变成背面的数,背面的数就变成正面的数。
示例:
输入: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 就是我们想要的数字。
提示:
1 <= fronts.length == backs.length <= 1000
1 <= fronts[i] <= 2000
1 <= backs[i] <= 2000
原站题解
php 解法, 执行用时: 44 ms, 内存消耗: 19.3 MB, 提交时间: 2023-08-02 09:39:06
class Solution { /** * @param Integer[] $fronts * @param Integer[] $backs * @return Integer */ function flipgame($fronts, $backs) { $same = []; for ($i = 0; $i < count($fronts); $i++) { if ( $fronts[$i] == $backs[$i]) array_push($same, $fronts[$i]); } $ans = 9999; foreach ($fronts as $x) { if ( !in_array($x, $same) ) $ans = min($ans, $x); } foreach ( $backs as $x ) { if ( !in_array($x, $same) ) $ans = min($ans, $x); } return $ans % 9999; } }
golang 解法, 执行用时: 16 ms, 内存消耗: 5.2 MB, 提交时间: 2023-03-09 17:53:45
func flipgame(fronts []int, backs []int) int { m := map[int]bool{} for i, x := range fronts { if x == backs[i] { m[x] = true } } ans := 9999 for _, x := range fronts { if k := m[x]; !k { ans = min(ans, x) } } for _, x := range backs { if k := m[x]; !k { ans = min(ans, x) } } return ans % 9999 } func min(x, y int) int { if x < y { return x }; return y }
javascript 解法, 执行用时: 64 ms, 内存消耗: 43.7 MB, 提交时间: 2023-03-09 17:47:56
/** * @param {number[]} fronts * @param {number[]} backs * @return {number} */ var flipgame = function(fronts, backs) { let set = new Set(); // 记录两面相同的数 fronts.forEach((i,idx) => { if (i === backs[idx]) set.add(i); }); let res = Infinity; for (let i of fronts) { // 选取剩下的最小的数 if (!set.has(i)) res = Math.min(res, i); } for (let i of backs) { if (!set.has(i)) res = Math.min(res, i); } return res === Infinity ? 0 : res; };
java 解法, 执行用时: 2 ms, 内存消耗: 41.4 MB, 提交时间: 2023-03-09 17:47:25
class Solution { public int flipgame(int[] fronts, int[] backs) { Set<Integer> same = new HashSet(); for (int i = 0; i < fronts.length; ++i) if (fronts[i] == backs[i]) same.add(fronts[i]); int ans = 9999; for (int x: fronts) if (!same.contains(x)) ans = Math.min(ans, x); for (int x: backs) if (!same.contains(x)) ans = Math.min(ans, x); return ans % 9999; } }
python3 解法, 执行用时: 44 ms, 内存消耗: 15.1 MB, 提交时间: 2023-03-09 17:46:00
''' 记住所有在一张卡上出现两次的值same, 然后每个不在same中的x都可能是答案; ''' class Solution(object): def flipgame(self, fronts, backs): same = {x for i, x in enumerate(fronts) if x == backs[i]} # 正反一样的数值 ans = 9999 for x in itertools.chain(fronts, backs): if x not in same: ans = min(ans, x) return ans % 9999