算法题解---双向队列的优化
2022/6/5 1:20:28
本文主要是介绍算法题解---双向队列的优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目
Leetcode:2290
两题均可用bfs算法做出,但很难做到最优。
而如果将queue替换成deque将可以将速度提升一倍
思路
主要是将优先级较高的放在队列前面,提前出队,优先级低的放在队列尾处。
如何判断优先级将是至关重要的
- 如果路过该点会使的之后的答案与题目要求相违背
- 即该点优先级较低,可以放入队尾
- 反之,可以放入队头
代码
queue未优化
int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; typedef pair<int,int> pii; class Solution { public: int minimumObstacles(vector<vector<int>>& grid) { auto & g = grid; int m = g.size(); int n= g[0].size(); vector<vector<int> > st(m+10,vector<int>(n+10,0x3f3f3f3f)); queue<pii> heap; heap.push({0,0}); int cnt=0; if(g[0][0])cnt++;st[0][0]=0; while(heap.size()){ auto top = heap.front(); heap.pop(); for(int i=0;i<4;i++){ int x= top.first+dx[i],y=top.second+dy[i]; if(x<0||x>=m||y<0||y>=n||st[x][y]<=(st[top.first][top.second]+g[x][y]))continue; st[x][y]=st[top.first][top.second]+g[x][y]; heap.push({x,y}); } } // for(int i=0;i<m;i++){ // for(int j=0;j<n;j++){ // cout<<st[i][j]<<" "; // }cout<<endl; // } return cnt+st[m-1][n-1]; } };
deque优化
int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; typedef pair<int,int> pii; class Solution { public: int minimumObstacles(vector<vector<int>>& grid) { auto & g = grid; int m = g.size(); int n= g[0].size(); vector<vector<int> > st(m+10,vector<int>(n+10,0x3f3f3f3f)); deque<pii> heap; heap.push_front({0,0}); int cnt=0; if(g[0][0])cnt++;st[0][0]=0; while(heap.size()){ auto top = heap.front(); heap.pop_front(); for(int i=0;i<4;i++){ int x= top.first+dx[i],y=top.second+dy[i]; if(x<0||x>=m||y<0||y>=n||st[x][y]<=(st[top.first][top.second]+g[x][y]))continue; st[x][y]=st[top.first][top.second]+g[x][y]; if(g[x][y]) heap.push_back({x,y}); else heap.push_front({x,y}); } } // for(int i=0;i<m;i++){ // for(int j=0;j<n;j++){ // cout<<st[i][j]<<" "; // }cout<<endl; // } return cnt+st[m-1][n-1]; } };
这篇关于算法题解---双向队列的优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门