780. 到达终点;2360. 图中的最长环;1871. 跳跃游戏 VII

780. 到达终点

核心思想:正难则反,如果从起点到终点很难想。那么我们就考虑从终点到起点,由于起点为正数,那么终点(x,y)的上一步一定是(x-y,y)或者(x,y-x)很明显肯定是大值减去小的值,然后我们不断重复这种操作,直到,终点的x或者y等于起点的x或者y,又或者两个值相同的时候停止,因为这种时候再去减去一个数一定出现不合理的情况。所以当不是这三种的情况的时候一直循环,这里为了加速减法采用了%,最后判断剩余的tx,ty的情况。

780. 到达终点;2360. 图中的最长环;1871. 跳跃游戏 VII_第1张图片

2360. 图中的最长环

核心思想:枚举每个节点,然后判断这个节点是否成环,用一个time[i]记录遍历到第i个节点的时间,它这表示了这个节点是否访问过了,然后用一个clock记录这个节点开始的时间,然后去递归节点,用start可以避免出现前面遍历过的节点,但是这个节点不成环的。

780. 到达终点;2360. 图中的最长环;1871. 跳跃游戏 VII_第2张图片

1871. 跳跃游戏 VII

核心思想:动态规划+前缀和优化。定义很简单dp[i]表示从0到i是否可以为dp[i]。然后下面放上伪代码和优化代码,主要是去优化any(j')那部分(j的范围(i-max,i-min))。

没优化的超时代码:

780. 到达终点;2360. 图中的最长环;1871. 跳跃游戏 VII_第3张图片

优化后的:

780. 到达终点;2360. 图中的最长环;1871. 跳跃游戏 VII_第4张图片

你可能感兴趣的:(python,算法)