您的位置:首页 > Web前端 > JavaScript

[LeetCode][JavaScript]Self Crossing

2016-02-25 23:34 811 查看

Self Crossing

You are given an array x of
n
positive numbers. You start at point
(0,0)
and moves
x[0]
metres to the north, then
x[1]
metres to the west,
x[2]
metres to the south,
x[3]
metres to the east and so on. In other words, after each move your direction changes counter-clockwise.

Write a one-pass algorithm with
O(1)
extra space to determine, if your path crosses itself, or not.

Example 1:

Given x = [code][2, 1, 1, 2]
,
Return true (self crossing)
[/code]

Example 2:

Given x = [code][1, 2, 3, 4]
,
Return false (not self crossing)
[/code]

Example 3:

Given x = [code][1, 1, 1, 1]
,
Return true (self crossing)[/code]
https://leetcode.com/problems/self-crossing/

逆时针画线,求线是否有交叉。

看图,三种情况,对应了代码中的注释。



/**
* @param {number[]} x
* @return {boolean}
*/
var isSelfCrossing = function(x) {
for(var i = 3; i < x.length; i++){
//i. [2, 1, 1, 2]
if(x[i - 3] && x[i] >= x[i - 2] && x[i - 1] <= x[i - 3])
return true;
//ii. [1, 1, 2, 1, 1]
if(x[i - 4] && x[i - 3] === x[i - 1] && x[i - 4] + x[i] >= x[i - 2])
return true;
//iii. [1, 1, 2, 2, 1, 1]
if(x[i - 5] && x[i - 4] <= x[i -2] && x[i] + x[i - 4] >= x[i -2]
&& x[i - 3] >= x[i - 1] && x[i - 5] + x[i - 1] >= x[ i - 3])
return true;
}
return false;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: