• LeetCode 1345. Jump Game IV(BFS)


    题目

    双周赛最后一题

    题意:从起始点开始走,每次只能往前走一步,或者往后走一步,或者直接跳到数值一样的格子。求跳到最后一个格子的最小步数

    题解: 一开始以为是动态规划,后来发现用BFS更加简单。动态规划也是可以解的。

    struct Node
    {
        int pos;
        int num;
        Node(){}
        Node(int pos,int num)
        {
            this->pos = pos;
            this->num = num;
        }
    };
    class Solution {
    public:
        map<int,vector<int>> m;
        int vis[50005];
        int minJumps(vector<int>& arr) {
            
            for(int i=1;i<arr.size();i++)
            {
                vis[i]=99999999;
                m[arr[i]].push_back(i);
            }
            
            queue<Node> q;
            int ans=0;
            q.push(Node(0,0));
            vis[0]=0;
            
            while(!q.empty())
            {
                Node term = q.front();
                q.pop();
                
                if(term.pos==arr.size()-1)
                    ans = term.num;
                //往后走一步
                if(term.pos>0)
                {
                    if(vis[term.pos-1]>term.num+1)
                    {
                        q.push(Node(term.pos-1,term.num+1));
                        vis[term.pos-1]=term.num+1;
                    }
                }
                
                //往前走一步
                if(vis[term.pos+1]>term.num+1)
                {
                    q.push(Node(term.pos+1,term.num+1));
                    vis[term.pos+1]=term.num+1;
                }
                
                //相同数值的位置
                for(int i=0;i<m[arr[term.pos]].size();i++)
                {
                    if(m[arr[term.pos]][i]==term.pos)
                        continue;
                   
                    if(vis[m[arr[term.pos]][i]]>=term.num+1)
                    {
                        q.push(Node(m[arr[term.pos]][i],term.num+1));
                        vis[m[arr[term.pos]][i]] = term.num+1;
                    }
                    else
                        break;//防止之后再次循环,超时。
                }
                
            }
            return ans;
            
        }
    
    };
    
  • 相关阅读:
    Go语言操作etcd
    grafana使用
    Java整理
    Go操作MySQL
    Go语言操作Redis
    es
    influxDB
    gopsutil
    Java基础之(三):IDEA的安装及破解 lyl
    ClojureScript 点访问格式
  • 原文地址:https://www.cnblogs.com/dacc123/p/12288316.html
Copyright © 2020-2023  润新知