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:

    Given x = [2, 1, 1, 2],
    ?????
    ?   ?
    ???????>
        ?
    
    Return true (self crossing)
    

    Example 2:

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

    Example 3:

    Given x = [1, 1, 1, 1],
    ?????
    ?   ?
    ?????>
    
    Return true (self crossing)
    

    解题思路:

    这道题我一开始想简单了,但是后来想到了更多的情况后就自己驳回自己了

    所以我参考了Grandyang的总结

    枚举出可能的情况:

         x(1)
        ┌───┐
    x(2)│   │x(0)
        └───┼──>
        x(3)│
            
          x(1)
        ┌──────┐
        │      │x(0)
    x(2)│      ^
        │      │x(4)
        └──────│
          x(3)


          x(1)
        ┌──────┐
        │      │x(0)
    x(2)│     <│────│
        │       x(5)│x(4)
        └───────────│
            x(3)
    
    

    根据这三种情况列出可能会出现selfcross的条件

    代码:

    class Solution {
    public:
        bool isSelfCrossing(vector<int>& x) {
            for(int i = 3; i < x.size(); i++){
                if(x[i] >= x[i-2] && x[i-3] >= x[i-1]){
                    return true;    
                }
                if(i >= 4 && x[i-1] == x[i-3] && x[i-2] <= (x[i]+x[i-4])){
                    return true;
                }
                if(i >= 5 && x[i-2] >= x[i-4] && x[i-3] >= x[i-1] && x[i-1] + x[i-5] >= x[i-3] && x[i] + x[i-4] >= x[i-2])
                    return true;
            }
            return false;
        }
    };
  • 相关阅读:
    探讨e.target与e.currentTarget
    JavaScript事件模型
    博客
    angular创建自定义指令的四种方式
    jqueryMobile模块整理—图标(icons)
    jqueryMobile模块整理—按钮(buttons)
    Visio 2010,如何打开多个窗口
    Ajax.ActionLink浏览器中代码解析问题
    响应式布局
    jquery的each
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9232012.html
Copyright © 2011-2022 走看看