LeetCode -- 822. 翻转卡片游戏

 

本题中,可以发现性质:若卡片正反面相同,则一定不会作为答案;

只要其不在正反面相同的卡片集合中就可以作为答案, 选答案最小的即可。

 

c ++ 
class Solution {
public:
    int flipgame(vector<int>& fronts, vector<int>& backs) {
        unordered_set<int> s;

        for(int i = 0; i < fronts.size(); i ++ ) {
            if(fronts[i] == backs[i]) {
                s.insert(fronts[i]);
            }
        }

        int res = 1e8;
        for(auto it : fronts) {
            if(!s.count(it)) {
                res = min(res, it);
            }
        }
        for(auto it : backs) {
            if(!s.count(it)) {
                res = min(res, it);
            }
        }

        if(res == 1e8) return 0;
        return res;
        
    }
};

 

python
class Solution:
    def flipgame(self, fronts: List[int], backs: List[int]) -> int:
        s = list()
        for i, j in zip(fronts, backs):
            if i == j and s.count(i) == 0:
                s.append(i)
        
        res = 1e8
        for i in fronts:
            if s.count(i) == 0:
                res = min(res, i)

        for i in backs:
            if s.count(i) == 0:
                res = min(res, i)
        if res == 1e8:
            return 0
        return res

 

java
class Solution {
    public int flipgame(int[] fronts, int[] backs) {
        Set<Integer> s = new HashSet<>();
        for(int i = 0; i < fronts.length; i ++ ) {
            if(fronts[i] == backs[i]) {
                s.add(fronts[i]);
            }
        }

        int res = 10000;
        for(int it : fronts) {
            if(!s.contains(it)) {
                res = Math.min(res, it);
            }
        }

        for(int it : backs) {
            if(!s.contains(it)) {
                res = Math.min(res, it);
            }
        }

        if(res == 10000) return 0;
        return res;
    }
}

 

golang
func flipgame(fronts []int, backs []int) int {
    s := make(map[int]int, 1010)
    n := len(fronts)

    for i := 0; i < n; i ++ {
        if fronts[i] == backs[i] {
            s[fronts[i]] ++ 
        }
    }

    res := 10000
    for i := 0; i < n; i ++ {
        if s[fronts[i]] == 0 {
            if res > fronts[i] {
                res = fronts[i]
            }
        }
    }

    for i := 0; i < n; i ++ {
        if s[backs[i]] == 0 {
            if res > backs[i] {
                res = backs[i]
            }
        }
    }

    if res == 10000 {
        return 0
    }
    return res
}

 

js
var flipgame = function(fronts, backs) {
    let s = new Set();
    for(let i = 0; i < fronts.length; i ++ ) {
        if(fronts[i] == backs[i]) {
            s.add(fronts[i]);
        }
    }

    let res = 10000
    for(let i of fronts) {
        if(!s.has(i)) {
            res = Math.min(res, i);
        }
    }

    for(let i of backs) {
        if(!s.has(i)) {
            res = Math.min(res, i);
        }
    }

    if(res == 10000) return 0;
    return res;

}; 

 

posted @ 2023-07-02 19:50  深渊之巅  阅读(29)  评论(0)    收藏  举报