335. Self Crossing

Difficulty:
Related Topics:
Similar Questions:

    Problem

    You are given an array of integers distance.

    You start at point (0,0) on an X-Y plane and you move distance[0] meters to the north, then distance[1] meters to the west, distance[2] meters to the south, distance[3] meters to the east, and so on. In other words, after each move, your direction changes counter-clockwise.

    Return true if your path crosses itself, and false if it does not.

      Example 1:

    Input: distance = [2,1,1,2]
    Output: true
    

    Example 2:

    Input: distance = [1,2,3,4]
    Output: false
    

    Example 3:

    Input: distance = [1,1,1,1]
    Output: true
    

      Constraints:

    Solution

    /**
     * @param {number[]} distance
     * @return {boolean}
     */
    var isSelfCrossing = function(distance) {
        for ( var i = 3; i < distance.length; i++ ){
        // i. [2, 1, 1, 2] 
        if (distance[i - 3] && distance[i] >= distance[i - 2] && distance[i - 1] <= distance[i - 3 ]) 
          return  true ;
        // ii. [1, 1, 2, 1, 1] 
        if (distance[i - 4] && distance[i - 3] === distance[i - 1] && distance[ i - 4] + distance[i] >= distance[i - 2 ]) 
          return true ;
        // iii. [1, 1, 2, 2, 1, 1] 
        if (distance[i - 5] && distance[i - 4] <= distance[i -2] && distance[i] + distance[i - 4] >= distance[i -2 ] 
          && distance[i - 3] >= distance[i - 1] && distance[i - 5] + distance[i - 1] >= distance[i - 3 ]) 
          return  true ;
        }
        return  false ;
    };
    

    Explain:

    nope.

    Complexity: