当前位置: 首页 > news >正文

从零学算法2833

2833.给你一个长度为 n 的字符串 moves ,该字符串仅由字符 ‘L’、‘R’ 和 ‘’ 组成。字符串表示你在一条原点为 0 的数轴上的若干次移动。
你的初始位置就在原点(0),第 i 次移动过程中,你可以根据对应字符选择移动方向:
如果 moves[i] = ‘L’ 或 moves[i] = '
’ ,可以选择向左移动一个单位距离
如果 moves[i] = ‘R’ 或 moves[i] = '’ ,可以选择向右移动一个单位距离
移动 n 次之后,请你找出可以到达的距离原点 最远 的点,并返回 从原点到这一点的距离 。
示例 1:
输入:moves = “L_RL__R”
输出:3
解释:可以到达的距离原点 0 最远的点是 -3 ,移动的序列为 “LLRLLLR” 。
示例 2:
输入:moves = “R__LL
输出:5
解释:可以到达的距离原点 0 最远的点是 -5 ,移动的序列为 “LRLLLLL” 。
示例 3:
输入:moves = "
______"
输出:7
解释:可以到达的距离原点 0 最远的点是 7 ,移动的序列为 “RRRRRRR” 。

  • 我的思路:首先这可以看成一棵二叉树,所以直接 dfs。首先入参,为了知道遍历到哪里了,用一个 int 表示当前 moves 下标。由于可以向左或者向右,所以用两个 int 表示向两边移动的距离;递归出口,当遍历完这棵树也就是 moves 遍历到最后一个字符时返回 max(左距离,右距离)。如果在遍历的过程中发现遍历到某个点时已经遇到过此时向(左,右)移动了多少距离这种情况,那可以直接返回 0 了,因为这种可能性我们已经考虑过了(比如 l__r_,我们可能是 llrr_ ,也可能是lrlr_,那此时其实就是重复的情况了,遍历到第五个点的 _ 时都是还在原点);否则就看当前字符了,为 L 说明向左走了一步,左距离 加 1,相对应的,别忘了,这就代表着右距离减了 1, R 同理,如果为 _ 就返回 max(左,右)
  •   char[] moves;// l[i][j] 遍历到第 i 个点并且此时往左走了长度 jint[][] l;// // l[i][j] 遍历到第 i 个点并且此时往右走了长度 jint[][] r;public int furthestDistanceFromOrigin(String moves) {this.moves = moves.toCharArray();int n = this.moves.length;l=new int[n][n];r=new int[n][n];return dfs(0,0,0);}// left 和 right 最多只可能有一个大于 0,一正一负,或者都为 0int dfs(int cur,int left,int right){// 遍历完了if(cur==moves.length){return Math.max(left,right);}// 如果这种情况已经考虑过了 return 0if((left>=0 && l[cur][left]==1) || (right>=0 && r[cur][right]==1))return 0;// 如果在左边,记录这种情况if(left>=0)l[cur][left]=1;// // 如果在右边,记录这种情况if(right>=0)r[cur][right]=1;if(moves[cur]=='L')return dfs(cur+1,left+1,right-1);if(moves[cur]=='R')return dfs(cur+1,left-1,right+1);return Math.max(dfs(cur+1,left+1,right-1),dfs(cur+1,left-1,right+1));}
    
  • 其实这题我想的复杂了,因为当遇到 _ 时,你的选择丝毫不影响之后的选择。也就是说你只需要记录有几个 _ ,然后看剩下的 L 和 R 会让你走到哪里,如果在左边你就把 _ 都选择往左走,在右边同理。
  •   public int furthestDistanceFromOrigin(String moves) {int x=0;int distance=0;for(char c:moves.toCharArray()){if(c=='_')x++;else distance+=c=='L'?-1:1;}return x+Math.abs(distance);}
    
http://www.lryc.cn/news/150780.html

相关文章:

  • python安装cfg模块时报错,ERROR: No matching distribution found for cfg
  • 优思学院|六西格玛中的概率分布有哪些?
  • 工控上位机程序为什么只能用C语言?
  • Go操作各大消息队列教程(RabbitMQ、Kafka)
  • 对话出海企业:2023亚马逊云科技出海日圆桌论坛
  • 【图解算法数据结构】分治算法篇 + Java代码实现
  • Ubuntu系统环境搭建(八)——Ubuntu开机自动执行命令
  • c++(8.29)auto关键字,lambda表达式,数据类型转换,标准模板库,list,文件操作+Xmind
  • Docker学习笔记(持续更新)
  • 无涯教程-Android - 应用组件
  • 树与图c++
  • 中小企业常用的 IT 项目管理软件有哪些?
  • 汇编原理计算方法:物理地址=段地址*16+偏移地址
  • jdk-8u371-linux-x64.tar.gz jdk-8u371-windows-x64.exe 【jdk-8u371】 全平台下载
  • 数据结构体--5.0图
  • 深入剖析 Golang 程序启动原理 - 从 ELF 入口点到GMP初始化到执行 main!
  • C语言——多文件编程
  • Git学习part1
  • 2309C++均为某个类型
  • 2023年打脸面试官之TCP--瞬间就懂
  • 设计模式-单例模式Singleton
  • PPPoE连接无法建立的排查和修复
  • QT 发布软件基本操作
  • CTFhub-SSRF-内网访问
  • Cenos7安装小火车程序动画
  • Node 执行命令时传参 process.argv
  • 【Vue】快速上手--Vue 3.0
  • PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用
  • 04、添加 com.fasterxml.jackson.dataformat -- jackson-dataformat-xml 依赖报错
  • 禅道项目管理系统 - 操作使用 (2023版)