LCP 03. 机器人大冒险
力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)
。小伙伴事先给机器人输入一串指令command
,机器人就会无限循环这条指令的步骤进行移动。指令有两种:
U
: 向y轴正方向移动一格R
: 向x轴正方向移动一格。
不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles
表示。机器人一旦碰到障碍物就会被损毁。
给定终点坐标(x, y)
,返回机器人能否完好地到达终点。如果能,返回true
;否则返回false
。
class Solution:
def robot(self, command: str, obstacles: List[List[int]], x: int, y: int) -> bool:
xi,yi=0,0
circle=[[0,0]] #第一次循环走过的点
for c in command:
if c=="R": xi+=1
else: yi+=1
circle.append([xi,yi])
cnt=min(x//xi,y//yi)
#是否会经过目标点
if [x-xi*cnt,y-yi*cnt] not in circle: return False
for x1,y1 in obstacles:
cnt=min(x1//xi,y1//yi)
if x1<=x and y1<=y and [x1-xi*cnt,y1-yi*cnt] in circle:
return False
return True
# 写这些为了不超时,为难了
845.数组中的最长山脉
class Solution:
def longestMountain(self, A: List[int]) -> int:
ans=i=j=0
while i<len(A)-2:
while i<len(A)-1 and A[i]>=A[i+1]:
i+=1
j=i # begin up
while j<len(A)-1 and A[j+1]>A[j]:
j+=1
summit=A[j] # begin down
while j<len(A)-1 and A[j]>A[j+1]:
j+=1
if A[i]<summit and summit>A[j]:
ans=max(ans,j-i+1)
i=j
return ans
#一种双指针的模拟