其他分享
首页 > 其他分享> > 1345. 跳跃游戏 IV bfs

1345. 跳跃游戏 IV bfs

作者:互联网

给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。

每一步,你可以从下标 i 跳到下标:

i + 1 满足:i + 1 < arr.length
i - 1 满足:i - 1 >= 0
j 满足:arr[i] == arr[j] 且 i != j
请你返回到达数组最后一个元素的下标处所需的 最少操作次数 。

注意:任何时候你都不能跳到数组外面。

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

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/jump-game-iv/solution/tiao-yue-you-xi-iv-by-leetcode-solution-zsix/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {
public:
    int minJumps(vector<int>& arr) {
        int n = arr.size();
        vector <bool> vis(n + 1, false);
        int ans = 0;

        map <int, set<int>> G;
        for (int i = 0; i < n; i++) {
            G[arr[i]].insert(i);
        }

        queue <int> q;
        q.push(n - 1);
        vis[n - 1] = false;
        while (!q.empty()) {
            int size = q.size();
            while (size--) {
                int cur = q.front(); q.pop();
                if (cur == 0) {
                    return ans;
                }
                if (cur + 1 < n && ! vis[cur + 1]) {
                    q.push(cur + 1);
                    vis[cur + 1] = true;
                }
                if (cur - 1 >= 0 && ! vis[cur - 1]) {
                    q.push(cur - 1);
                    vis[cur - 1] = true;
                }
                for (auto x : G[arr[cur]]) {
                    if (!vis[x]) {
                        vis[x] = true;
                        q.push(x);
                    }
                }
                G[arr[cur]].clear();
            }
            ans++;
        }

        return ans;
    }
};

标签:arr,cur,int,子图,1345,IV,bfs,vis,size
来源: https://www.cnblogs.com/xgbt/p/15858295.html