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

    题目大意

    数组中保存了矩形的边长,每次按照从南向北、从东向西、从北向南、从西向东、从南向北、。。。的方向画线,判断是否有任意两条线相交。

    示例

    E1

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

    E2

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

    E3

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

    解题思路

    只需要判断三种情况,第四条线与第一条线相交、第五条线与第一条线相交、第六条线与第一条线相交,其余的任意两条线相交都可以转换成以上三种情况,因此只需要遍历数组,以此判断以上三种情况就可以判断是否有两条线相交。

    复杂度分析

    时间复杂度:O(N)

    空间复杂度:O(1)

    代码

    class Solution {
    public:
        bool isSelfCrossing(vector<int>& x) {
            int len = x.size();
            if(len <= 3)
                return false;
            // 遍历数组
            for(int i = 3; i < len; ++i) {
                // 若第一条线与第四条线相交
                if(x[i - 1] <= x[i - 3] && x[i] >= x[i - 2])
                    return true;
                // 若第一条线与第五条线相交
                if(i >= 4) {
                    if(x[i - 1] == x[i - 3] && x[i] + x[i - 4] >= x[i - 2])
                        return true;
                }
                // 若第一条线与第六条线相交
                if(i >= 5) {
                    if(x[i] + x[i - 4] >= x[i - 2] && x[i - 1] + x[i - 5] >= x[i - 3] && x[i - 2] >= x[i - 4] && x[i - 1] <= x[i - 3])
                        return true;
                }
            }
            
            return false;
        }
    };
  • 相关阅读:
    对象的深度复制和浅复制 (深度拷贝和浅拷贝)
    包容网关 Inclusive Gateway
    一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝)
    撸一个简单的vue-router来剖析原理
    vue-组件化-插槽(slot)
    从0开始探究vue-组件化-组件之间传值
    从0开始探究vue-公共变量的管理
    从0开始探究vue-双向绑定原理
    【图机器学习】cs224w Lecture 16
    【图机器学习】cs224w Lecture 15
  • 原文地址:https://www.cnblogs.com/heyn1/p/11207883.html
Copyright © 2011-2022 走看看