class Solution {
public:
bool isSelfCrossing(vector<int>& x) {
/*solution 1: only in three cases when cross
/* i-2
case 1 : i-1┌─┐
└─┼─>i
i-3
i-2
case 2 : i-1 ┌────┐
└─══>┘i-3
i i-4
case 3 : i-4
┌──┐
│i<┼─┐
i-3│ i-5│i-1
└────┘
i-2
*/
/*for(int i = 3; i < x.size(); ++i) {
if(x[i] >= x[i-2] && x[i-1] <= x[i-3]) return true;
if(i >= 4 && x[i-1] == x[i-3] && x[i-2] <= x[i] + x[i-4]) return true;
if(i >= 5 && x[i-2] >= x[i-4] && x[i-2] <= x[i-4] + x[i] && x[i-1] <= x[i-3] && x[i-5] + x[i-1] >= x[i-3]) return true;
}
return false;*/
/*solution 2: make x[i-2] as x[i]'s boundary*/
if(x.size() <= 3) return false;
for(int i = 3, flag = x[2] > x[0]; i < x.size(); ++i) {
if(!flag && x[i] >= x[i-2]) return true;//case 1 in solution 1
if(flag && x[i] <= x[i-2]) {
flag = 0;
/*if(i >= 4) {
x[i-1] = x[i] + x[i-4] >= x[i-2] ? x[i-1] - x[i-3] : x[i-1];//case 3 in solution 1
} else {
x[i-1] = x[i] == x[i-2] ? x[i-1] - x[i-3] : x[i-1];//case 2 in solution 1
}*/
x[i-1] = x[i] + (i >= 4 ? x[i-4] : 0) >= x[i-2] ? x[i-1] - x[i-3] : x[i-1];
}
}
return false;
}
};
参考:1. solution 1: https://www.hrwhisper.me/leetcode-self-crossing/
2. solution 2: leetcode Disscuss