zoukankan      html  css  js  c++  java
  • 335. 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:

    ┌───┐
    │   │
    └───┼──>
        │
    
    Input: [2,1,1,2]
    Output: true
    

    Example 2:

    ┌──────┐
    │      │
    │
    │
    └────────────>
    
    Input: [1,2,3,4]
    Output: false 
    

    Example 3:

    ┌───┐
    │   │
    └───┼>
    
    Input: [1,1,1,1]
    Output: true 

    Approach #1: Math. [Java]

    class Solution {
        public boolean isSelfCrossing(int[] x) {
            if (x.length < 4) return false;
            for (int i = 3; i < x.length; ++i) {
                if (x[i] >= x[i-2] && x[i-3] >= x[i-1]) return true;
                if (i >= 4) {
                    if (x[i-3] == x[i-1] && x[i] + x[i-4] >= x[i-2]) return true;
                }
                if (i >= 5) {
                    if (x[i-2] >= x[i-4] && x[i-1] + x[i-5] >= x[i-3] && x[i] >= x[i-2] - x[i-4] && x[i-1] <= x[i-3]) 
                        return true;
                }
            }
            return false;
        }
    }
    

      

    Analysis:

    Categarize the self-crossing scenarios, there are 3 of them:

    1. Fourth line crosses first line and works for fifth line crosses second and so on...

    2. Fifth line meets first line and works for the lines after

    3. Sixth line crosses first line and works for the lines after.

    Reference:

    https://leetcode.com/problems/self-crossing/discuss/79131/Java-Oms-with-explanation

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    牛客练习赛53 B题调和级数
    装备购买(线性基)
    杨氏矩阵与勾长公式
    南昌邀请赛B题(拉格朗日插值)
    徐州网络赛补题
    __int128 输入输出模板
    51 nod1067 Bash游戏 V2(sg函数打表)
    堆优化的dijkstra算法
    ST表求区间最值
    Tree Reconstruction
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10809104.html
Copyright © 2011-2022 走看看