博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Self Crossing
阅读量:6372 次
发布时间:2019-06-23

本文共 1388 字,大约阅读时间需要 4 分钟。

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)

解题思路

相交可分为如下三种情况:

  • 第四条线与第一条线相交
  • 第五条线与第一条线相交或重叠
  • 第六条线与第一条线相交
    这里写图片描述
    点Xi为给定的最后一个点。

实现代码

// Runtime: 1 mspublic class Solution {
public boolean isSelfCrossing(int[] x) { int len = x.length; if(len <= 3) return false; for(int i = 3; i < len; i++) { if(x[i] >= x[i-2] && x[i-1] <= x[i-3]) { 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-2] - x[i-4] >= 0 && x[i] >= x[i-2] - x[i-4] && x[i-1] >= x[i-3] - x[i-5] && x[i-1] <= x[i-3]) { return true; } } } return false; }}
你可能感兴趣的文章
JVM源码分析之一个Java进程究竟能创建多少线程
查看>>
live555源码学习笔记之TaskScheduler
查看>>
SQL总结(一)基本查询
查看>>
unity 3d音效如何设置?,近大远小
查看>>
vs2017开发IOS(vs2017 xamarin 连接mac)
查看>>
Oracle 中 nvl、nvl2、nullif、coalesce、decode 函数的用法详解
查看>>
Python unittest 测试输入(input)和输出(print)
查看>>
常用消息中间件比较
查看>>
springboot 没有跳转到指定页面
查看>>
NSNumber 与NSValue
查看>>
php中urlencode和urldecode的用法
查看>>
Flutter & Dart 安装在window系统
查看>>
uwp - 上滑隐藏导航栏下滑显示
查看>>
sitecore系列教程之如何以编程方式将访客数据关联到联系人卡片
查看>>
如何修改DEDECMS文章标题长度
查看>>
工控随笔_14_西门子_Step7项目:打开项目不可用解决方法
查看>>
Python-定时爬取指定城市天气(一)-发送给关心的微信好友
查看>>
请不要怪罪流程
查看>>
csharp: Socket
查看>>
转 码农提高工作效率
查看>>