题意
给定一个步长数组,分别按北西南东方向走,问会不会穿过之前走过的地方,需要空间复杂度o(1)的解法。
题解
题目需要空间复杂度o(1)的解法,所以肯定每一步只与之前的几步有关系,然后可以画图分析一下超过六步之后之前的就肯定不会遇到了。所以只需要向前考虑六步就行了。
代码
class Solution {
public:
bool isSelfCrossing(vector<int>& x) {
if (x.size() < 4) {
return false;
}
for (int i = 3; i < x.size(); i++) {
if (x[i - 1] <= x[i - 3] && x[i] >= x[i - 2]) {
return true;
}
if (i >= 4 && x[i - 1] == x[i - 3] && x[i] + x[i - 4] >= x[i - 2]) {
return true;
}
if (i >= 5 && x[i - 1] + x[i - 5] >= x[i - 3] && x[i - 1] <= x[i - 3] && x[i - 2] >= x[i - 4] && x[i] + x[i - 4] >= x[i - 2]) {
return true;
}
if (i >= 5 && x[i - 1] + x[i - 5] >= x[i - 3] && x[i - 2] < x[i - 4] && x[i] >= x[i - 2]) {
return true;
}
}
return false;
}
};