LeetCode-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)
这题考验逻辑归类能力。看了别人的思路,其实只有三种情况能crossing
如果在一个轮回内,情况比较简单,只有一种可能crossing。
如果超过了一个轮回,有两种情况。
1 public class Solution { 2 public boolean isSelfCrossing(int[] x) { 3 int len=x.length; 4 //boolean b=false; 5 if(len < 4){ 6 return false; 7 } 8 else{ 9 for(int i=3; i<len; i++){ 10 if(x[i-3]>=x[i-1] && x[i-2]<=x[i]){ 11 return true; 12 } 13 if(i>=4 && x[i-1]==x[i-3] && x[i]+x[i-4]>=x[i-2]){ 14 return true; 15 } 16 if(i>=5 && i >= 5 && x[i-2] >= x[i-4] && x[i-3] >= x[i-1] && x[i-1] >= x[i-3] - x[i-5] && x[i] >= x[i-2] - x[i-4]){ 17 return true; 18 } 19 } 20 } 21 return false; 22 } 23 }
posted on 2016-03-10 01:57 IncredibleThings 阅读(207) 评论(0) 编辑 收藏 举报