解题思路:模拟。
重点在于模拟第4条线的终点相对于第1条线的位置,有3种情况:
1.第4条线的终点超出了第1条线
2.第4条线的终点刚好在第1条线那里
3.第4条线的终点在第1条线以内(如下图)
-----------
| |
| |
------
public class Solution {
public boolean isSelfCrossing(int[] x) {
int len = x.length;
if (len <= 3){
return false;
}else{
if (x[2] <= x[0] && x[3] >=x[1]){ //判断前4次是否会cross
return true;
}
if (len >= 5 && x[3] == x[1] && x[4] + x[0] >= x[2]){ //第5次cross
return true;
}
if (len >= 5){
int[] lastFive = {x[0], x[1], x[2], x[3], x[4]};
for(int i = 4; i <len; i ++){
if (x[i-1] == x[i-3]){ //判断是否会刚好碰头
if (x[i] + x[i-4] >= x[i-2])
return true;
}
if (x[i-1] > x[i-3]){
if(i < len - 1){
if (x[i] < x[i-2] && x[i] + x[i-4] >= x[i-2] && x[i+1] + x[i-3] >= x[i-1])
return true;
}
}else{
if(x[i] >= x[i-2])
return true;
}
}
}
return false;
}
}
}