LeetCode 353. 贪吃蛇(deque+set)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

请你设计一个 贪吃蛇游戏,该游戏将会在一个 屏幕尺寸 = 宽度 x 高度 的屏幕上运行。

起初时,蛇在左上角的 (0, 0) 位置,身体长度为 1 个单位。

你将会被给出一个 (行, 列) 形式的食物位置序列。当蛇吃到食物时,身子的长度会增加 1 个单位得分也会 +1

食物不会同时出现,会按列表的顺序逐一显示在屏幕上。比方讲,第一个食物被蛇吃掉后,第二个食物才会出现。

当一个食物在屏幕上出现时,它被保证不能出现在被蛇身体占据的格子里。

对于每个 move() 操作,你需要返回当前得分或 -1(表示蛇与自己身体或墙相撞,意味游戏结束)。

示例:给定 width = 3, height = 2, 食物序列为 food = [[1,2],[0,1]]。Snake snake = new Snake(width, height, food);初始时,蛇的位置在 (0,0) 且第一个食物在 (1,2)|S| | |
| | |F|snake.move("R"); -> 函数返回 0| |S| |
| | |F|snake.move("D"); -> 函数返回 0| | | |
| |S|F|snake.move("R"); -> 函数返回 1 
(蛇吃掉了第一个食物,同时第二个食物出现在位置 (0,1))| |F| |
| |S|S|snake.move("U"); -> 函数返回 1| |F|S|
| | |S|snake.move("L"); -> 函数返回 2 (蛇吃掉了第二个食物)| |S|S|
| | |S|snake.move("U"); -> 函数返回 -1 (蛇与边界相撞,游戏结束)

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

2. 解题

class SnakeGame {vector<vector<int>> food;int m, n, i = 0, score = 0;int x = 0, y = 0;unordered_map<string, vector<int>> dir;deque<pair<int,int>> body;set<pair<int,int>> body_set;
public:/** Initialize your data structure here.@param width - screen width@param height - screen height @param food - A list of food positionsE.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. */SnakeGame(int width, int height, vector<vector<int>>& food) {this->food = food;n = width;m = height;dir["R"] = {0,1};dir["D"] = {1,0};dir["U"] = {-1,0};dir["L"] = {0,-1};body.push_back({0,0});body_set.insert({0,0});}/** Moves the snake.@param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down @return The game's score after the move. Return -1 if game over. Game over when snake crosses the screen boundary or bites its body. */int move(string direction) {x += dir[direction][0];y += dir[direction][1];if(!(x>=0 && x<m && y>=0 && y<n)) return -1;//出界if(i < food.size() && x == food[i][0] && y == food[i][1]){   //吃到食物body.push_front({x, y});//头部加上body_set.insert({x, y});i++;score++;}else//没吃到{pair<int,int> tail = body.back();body_set.erase(tail);//删除尾巴body.pop_back();//删除尾巴body.push_front({x, y});//头部加上if(body_set.count({x,y}))//撞身体了return -1;body_set.insert({x,y});//身体集合加入头部}return score;}
};

364 ms 73.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中__del__使用方法

创建对象后&#xff0c;python解释器默认调用__init__()方法。当删除一个对象时&#xff0c;python解释器也会默认调用一个方法&#xff0c;这个方法为__del__()方法。在python中&#xff0c;对于开发者来说很少会直接销毁对象(如果需要&#xff0c;应该使用del关键字销毁)。Py…

html中post和get区别

HTTP协议中的GET和POST方法——二者主要区别如下&#xff1a; 1. get是从服务器上获取数据&#xff0c;post是向服务器传送数据。2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中&#xff0c;值和表单内各个字段一一对应&#xff0c;在URL中可以看到。post是通过HT…

计算机简单故障时的排除方法,电脑简单故障排除解决办法大全

电脑简单故障排除解决办法大全一、电脑罢 工了?听报警声就可以处理故障!在使用电脑的时候&#xff0c;我们会经常遇到开机时电脑黑屏没有反应的情况&#xff0c;普通的电脑用户而对这样的故障实在是无从下手&#xff0c;但是一般电脑会有一个内部自检的功能&#xff0c;如果检…

LeetCode MySQL 1543. Fix Product Name Format(trim去空格+upper/lower大小写)

文章目录1. 题目2. 解题1. 题目 Table: Sales ----------------------- | Column Name | Type | ----------------------- | sale_id | int | | product_name | varchar | | sale_date | date | ----------------------- sale_id is the primary key for …

云计算之路-阿里云上:拔云见日的那一刻,热泪盈眶

当用路过秋天的压力测试工具重现问题的那一刻&#xff0c;热泪盈眶&#xff01;这段时间所承受的一切一涌而出。。。 下面这张图是首次压力测试重现问题时的Windows性能监视器截图&#xff0c;我们对这样的图太熟悉了&#xff0c;当它一出现&#xff0c;就知道问题重现了。红色…

科润酒吧点单系统服务器配置,那些牛逼的酒吧都用什么管理系统?

原标题&#xff1a;那些牛逼的酒吧都用什么管理系统&#xff1f;关于酒吧你是熟悉还是陌生&#xff1f;对酒吧的管理系统&#xff1f;你接触的都有哪些&#xff1f;今天分享一个超大型酒吧的系统解决方案。宁波最大酒吧S86正式营业&#xff0c;视易娱加管理系统助力场所运营&am…

LeetCode 第 32 场双周赛(983/2957,前33.2%)

文章目录1. 比赛结果2. 题目1. LeetCode 5468. 第 k 个缺失的正整数 easy2. LeetCode 5469. K 次操作转变字符串 medium3. LeetCode 5470. 平衡括号字符串的最少插入次数 medium4. LeetCode 5485. 找出最长的超赞子字符串 hard1. 比赛结果 两题选手报道&#xff0c;继续加油&a…

python中的类属性和实例属性

类属性和实例属性&#xff0c;一般我们接触到的就是实例属性&#xff08;对象属性&#xff09;&#xff0c;顾名思义&#xff0c; # 实例属性是对象持有的&#xff0c;不是共享的属性 # 实例属性只有对象能够访问 类属性就是类对象所拥有的属性&#xff0c;它被所有类对象的实…

图片网站用什么服务器好,网站图片与框架放在不同服务器有哪些优缺点

如今很多企业线上发展迅速&#xff0c;对网站的要求也越来越高&#xff0c;因此出现分离式网站架构。怎样理解分离式网站架构呢&#xff1f;理解最简单的一种&#xff0c;即将图片与网站架构分开存放。的确&#xff0c;现在很多企业都采取这样的操作模式&#xff0c;也有可能成…

迭代器是神马东西

一、迭代器用来干嘛的&#xff1f; 本质是指针&#xff0c;用来遍历访问容器中元素的。 STL实现了容器和算法的分离&#xff0c;如何实现的呢&#xff0c;答曰用类模板和函数模板&#xff0c;也可理解为所谓的泛化。那么容器和算法又是怎样结合在一起的呢&#xff0c;答曰迭代器…

python中的类方法和静态方法

类可以有类属性&#xff0c;也可以有类方法&#xff0c;类方法主要是对类属性的封装。是类对象所拥有的方法&#xff0c;需要用修饰器classmethod来标识其为类方法&#xff0c;对于类方法&#xff0c;第一个参数必须是类对象&#xff0c;一般以cls作为第一个参数&#xff08;当…

LeetCode 第 201 场周赛(304/5614,前5.42%)

文章目录1. 比赛结果2. 题目1. LeetCode 5483. 整理字符串 easy2. LeetCode 5484. 找出第 N 个二进制字符串中的第 K 位 medium3. LeetCode 5471. 和为目标值的最大数目不重叠非空子数组数目 medium4. LeetCode 5486. 切棍子的最小成本 hard1. 比赛结果 做出来3题&#xff0c;…

洛克王国进不去 不显示服务器,《洛克王国》FAQ:注册和登陆问题

《洛克王国》FAQ&#xff1a;注册和登陆问题Q&#xff1a;如何登录洛克王国A&#xff1a; 1、 用户在洛克王国首页登录框中&#xff0c;输入自己的QQ号和密码后&#xff0c;点击“登录”按钮即可进入选择服务器界面。2、 洛克王国为用户提供了方便的选择服务器设定&#xff0c;…

出现一次的数字

看了何海涛的日志 他分别解决了一个 两个 三个 出现一次的数字的思路 给人的感觉有一生二 二生三 三生万物的思维 现把自己的感悟写下来 一个 思路很简单 所有数字异或的结果 两个 关键是区别 所有的数字异或的结果同时也是两个出现一次数字异或的结果 记为XORresult<>0 …

python中的__new__概念(工厂

__new__方法实际上在__init__方法之前执行&#xff0c;用于创建类的实例。然而__init__方法负责实例创建后对其进行自定义&#xff0c;__new__方法才是实际上创建并返回实例的方法。 __new__方法的第一个也是最重要的参数是创建实例所需的要的类(按照惯例&#xff0c;命名为cl…

LeetCode 723. 粉碎糖果(模拟)

文章目录1. 题目2. 解题1. 题目 这个问题是实现一个简单的消除算法。 给定一个二维整数数组 board 代表糖果所在的方格&#xff0c;不同的正整数 board[i][j] 代表不同种类的糖果&#xff0c;如果 board[i][j] 0 代表 (i, j) 这个位置是空的。 给定的方格是玩家移动后的游戏…

css动画放大延迟,css3延时动画

不太理解属性都是什么意思&#xff0c;但是有动画效果&#xff0c;我也是惊呆了#animated_div{animation:animated_div 4s 1;-moz-animation:animated_div 4s 1;-webkit-animation:animated_div 4s 1;-o-animation:animated_div 4s 1; width:800px; height:500px; position:rel…

Hibernate 异常org.hibernate.LazyInitializationException: could not initialize proxy - no Session

最近代写毕业设计中小网站&#xff0c;SSH架构&#xff0c;三年没搞过这个&#xff0c;忘记了&#xff0c;今天遇到这个问题就记录下&#xff1a; 错误页面提示 could not initialize proxy - no Session 控制台 org.hibernate.LazyInitializationException: could not initial…

python中的异常

异常处理就是处理程序中的错误。谓错误是指在程序运行的过程中发生的一些异常事件&#xff08;如&#xff1a;除0溢出&#xff0c;数组下标越界&#xff0c;所要读取的文件不存在等等&#xff09;。 在python中提供专门用于处理程序中错误的一种机制&#xff0c;异常机制&#…

css3案例分析,CSS3动画/动画库以及案例分析(上)

在这html5遍天下的年代&#xff0c;越来越多的网页也用到了css3的动画效果&#xff0c;这让原本我们静态的页面有了更多的活力。最近也一直在做这方面的页面&#xff0c;有些小小的心得&#xff0c;和诸位分享下。CSS3的动画绝对是很赞的&#xff0c;不仅支持PC还支持移动端&am…