这个题目需要分情况讨论,网上的解法都是leetcode discuss中的,下面是我的总结。对于数组x[],如果现在有某条线与第一条线x[0]相交,那么会是什么情况呢?
1、第4条线与第一条线相交,即x[0]与x[3]相交
2、第5条线与第一条线相交,即x[0]与x[4]相交
3、第6条线与第一条线相交,即x[0]与x[5]相交
如果x[0]与上述三条线都不相交,那么x[0]与x[5]之后的任何一条线都不可能相交了,你可以画图试试。
那么现在问题就简单了,既然只有这三条线可能与第一条线相交,那么我们就按情况分析:
首先,当x[0]与x[3]相交时,需要满足的条件是:x[i] >= x[i-2] && x[i-1] <= x[i-3];
其次,当x[0]与x[4]相交时,需要满足的条件是:x[i-1] == x[i-3] && x[i] + x[i-4] >= x[i-2];
最后,当x[0]与x[5]相交时,需要满足的条件是:x[i-2] >= x[i-4] && x[i] + x[i-4] >= x[i-2] && x[i-1] <= x[i-3] && x[i-1] + x[i-5] >= x[i-3]。
情况分析清楚了,代码也就有了,代码如下:
class Solution {
public:
bool isSelfCrossing(vector<int>& x) {
for(int i=3, l=x.size(); i<l; i++) {
if(x[i]>=x[i-2] && x[i-1]<=x[i-3]) {
return true;
} else if(i>=4 && x[i-1]==x[i-3] && x[i]+x[i-4]>=x[i-2]) {
return true;
} else if(i>=5 && x[i-2]>=x[i-4] && x[i]+x[i-4]>=x[i-2] && x[i-1]<=x[i-3] && x[i-1]+x[i-5]>=x[i-3]) {
return true;
}
}
return false;
}
};