335. 路径交叉

给你一个整数数组 distance 。

从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。

判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false 。

 

示例 1:

输入:distance = [2,1,1,2]
输出:true
示例 2:

输入:distance = [1,2,3,4]
输出:false
示例 3:

输入:distance = [1,1,1,1]
输出:true
 

提示:

1 <= distance.length <= 105
1 <= distance[i] <= 105

思路1:将经过的所有点加入到集合中,判断路径是否穿越该点    复杂度太高

思路2:将所有边加入到集合中,判断路径是否穿越该边    复杂度太高

思路3:考虑所有情况 一共6种

 1 class Solution(object):
 2     def isSelfCrossing(self, distance):
 3         """
 4         :type distance: List[int]
 5         :rtype: bool
 6         """
 7         lens = len(distance)
 8 
 9         if lens < 4:
10             return False
11         i = 3
12         while i < lens:
13             if (distance[i] >= distance[i - 2]) and (distance[i - 3] >= distance[i - 1]):
14                 return True
15             if i >= 4:
16                 if (distance[i] + distance[i - 4] == distance[i - 2]) and (distance[i - 3] == distance[i - 1]):
17                     return True
18             if i >= 5:
19                 if (distance[i] + distance[i - 4] >= distance[i - 2]) and \
20                         (distance[i - 5] + distance[i - 1] >= distance[i - 3]) and \
21                         (distance[i - 3] > distance[i - 1]) and (distance[i - 2] > distance[i - 4]):
22                     return True
23             i += 1
24         return False

 

 

 

posted @ 2021-10-29 11:41  散装英语king  阅读(30)  评论(0编辑  收藏  举报