LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符‘L’或‘R’,遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步
LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符‘L’或‘R’,遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步?
提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目
互联网大厂们在公司养了一大批ACM竞赛的大佬们,吃完饭就是设计考题,然后去考应聘人员,你要做的就是学基础树结构与算法,然后打通任督二脉,以应对波云诡谲的大厂笔试面试题!
你要是不扎实学习数据结构与算法,好好动手手撕代码,锻炼解题能力,你可能会在笔试面试过程中,连题目都看不懂!比如华为,字节啥的,足够让你读不懂题
文章目录
- LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符‘L’或‘R’,遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步?
- @[TOC](文章目录)
- 题目
- 一、审题
- 二、解题
- 总结
题目
一、审题
示例:上面
二、解题
我的逻辑是
定义f(arr, i, visited)
从位置i出发,看看能走几步离开棋盘?
其实很简单
Node放俩属性,一个字符LR,一个方数字x
public static class Node{public char ch;public int x;public Node(char c, int xx){ch = c;x = xx;}}
其余的当i出界,那就是离开了棋盘
走过的位置i用visited标记,如果你又跳回来了,恐怕走不出去了就,返回-1
否则就是见L,走左边,见R走右边,必须走1步,再看看后续能否离开,可以就累加返回,不能返回-1
手撕代码很简单
//从arr的i位置离开盘子需要多少步?public static int f(Node[] arr, int i, boolean[] visited){if (i < 0 || i >= arr.length) return 0;//离开了,0步if (visited[i]) return -1;//失败了visited[i] = true;//走过if (arr[i].ch == 'L'){int left = f(arr, i - arr[i].x, visited);//去左边return left != -1 ? 1 + left : -1;}else if (arr[i].ch == 'R'){int right = f(arr, i + arr[i].x, visited);//去右边return right != -1 ? 1 + right : -1;}else return -1;//其他字母不行}
然后主函数咋搞?
就是遍历n个位置,每个位置都走一波试试
public static void main(String[] args) {Scanner in = new Scanner(System.in);int t = in.nextInt();in.nextLine();//回车for (int i = 0; i < t; i++) {int n = in.nextInt();in.nextLine();//回车Node[] arr = new Node[n];//棋盘for (int j = 0; j < n; j++) {String s = in.nextLine();arr[j] = new Node(s.charAt(0), s.charAt(2) - '0');//包装放入}//从左往右收集答案int[] ans = new int[n];for (int j = 0; j < n; j++) {boolean[] visited = new boolean[n];//走过不能走了ans[j] = f(arr, j, visited);//j出发}for (int j = 0; j < n; j++) {if (j != n - 1) System.out.print(ans[j] +" ");else System.out.println(ans[j]);}}}
测试一把:
很OK
不过当时我朋友说只过了10%
有哪个大佬出来指证一波,我这个思路有bug?
总结
提示:重要经验:
1)走过的不能走,就是典型的业务限制类型递归就行
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。
LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符‘L’或‘R’,遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步相关推荐
- LeetCode高频题:最长公共子序列,玩游戏A和游戏B,两兄弟加起来最多可以获得多少奖品
LeetCode高频题:最长公共子序列,玩游戏A和游戏B,两兄弟加起来最多可以获得多少奖品? 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面 ...
- LeetCode高频题29. 两数相除:不用加减乘除号,求加法,减法,乘法,除法
LeetCode高频题29. 两数相除 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛 ...
- LeetCode高频题300. 最长递增子序列
LeetCode高频题300. 最长递增子序列 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...
- LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波
LeetCode高频题76. 最小覆盖子串:欠账还债还款问题,子串考虑i开头的情况所有答案更新一波 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从 ...
- LeetCode高频题:二叉树的锯齿形(Z字形,之字形)层序遍历
LeetCode高频题:二叉树的锯齿形(Z字形,之字形)层序遍历 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们 ...
- LeetCode高频题:《逆水寒》在地图的制作中,美术在地图上刷一片连通区域,连通区域自动填充,请你判断给定几个点位置,他们是否属于被刷区域
LeetCode高频题:<逆水寒>在地图的制作中,美术在地图上刷一片连通区域,连通区域自动填充,请你判断给定几个点位置,他们是否属于被刷区域? 提示:本题是系列LeetCode的150道高 ...
- LeetCode高频题:戈壁滩种树,一排n棵树,至少有k棵树存活时,最终形成的风景线有多少不同的情况
LeetCode高频题:戈壁滩种树,一排n棵树,至少有k棵树存活时,最终形成的风景线有多少不同的情况 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是 ...
- LeetCode高频题37. 解数独
LeetCode高频题37. 解数独 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛的 ...
- LeetCode高频题33. 搜索旋转排序数组
LeetCode高频题33. 搜索旋转排序数组 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...
最新文章
- activemq无账户密码登录配置修改
- 奖牌分配/Median Pyramid Hard
- IOS之使用纯代码push ViewController
- POJ1003/1004/1005/1207/3299/2159/1083/3094/2388解题(刷一波水题)
- Ubuntu18.04搭建Web服务器
- 《视觉SLAM十四讲》课后习题—ch7(更新中……)
- oracle10g sql on条件,ORACLE 10G使用SQLNET.ORA限制IP登陆
- 如何把后缀为.mdf的文件打开
- 分布式系统架构的本质
- 使用UICollectionView实现首页的滚动效果
- php 抓取 百度百科,百度百科词条内容爬取-爬虫大作业
- java如何快速标记条_【JAVA】如何利用TODO任务标签高效管理代办代码
- createjs初学-关于Ticker
- 软件测试完后,运行后还有BUG,测试人员就应该背锅吗?
- 趣文:三分钟了解敏捷开发
- 鸭子模型_如果它看起来像鸭子,嘎嘎像鸭子,但需要电池-您的抽象错误
- tableau:凹凸图
- 火狐linux版更改语言,修改Firefox火狐语言 添加火狐语言包的方法
- x265-1.7版本-x265.h代码注释
- 【报告分享】2020年K12在线教育行业数据研究报告-极光(附下载)