模拟


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

#一种双指针的模拟

文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录