File tree 6 files changed +224
-2
lines changed
solution/0300-0399/0335.Self Crossing
6 files changed +224
-2
lines changed Original file line number Diff line number Diff line change 50
50
51
51
<!-- 这里可写通用的实现逻辑 -->
52
52
53
+ ``` bash
54
+ i-2
55
+ case 1 : i-1┌─┐
56
+ └─┼─> i
57
+ i-3
58
+
59
+ i-2
60
+ case 2 : i-1 ┌────┐
61
+ └─══> ┘i-3
62
+ i i-4
63
+
64
+ case 3 : i-4
65
+ ┌──┐
66
+ │i< ┼─┐
67
+ i-3│ i-5│i-1
68
+ └────┘
69
+ i-2
70
+ ` ` `
71
+
53
72
< ! -- tabs:start -->
54
73
55
74
# ## **Python3**
56
75
57
76
< ! -- 这里可写当前语言的特殊实现逻辑 -->
58
77
59
78
` ` ` python
60
-
79
+ class Solution:
80
+ def isSelfCrossing(self, distance: List[int]) -> bool:
81
+ d = distance
82
+ for i in range(3, len(d)):
83
+ if d[i] > = d[i - 2] and d[i - 1] < = d[i - 3]:
84
+ return True
85
+ if i > = 4 and d[i - 1] == d[i - 3] and d[i] + d[i - 4] > = d[i - 2]:
86
+ return True
87
+ if i > = 5 and d[i - 2] > = d[i - 4] and d[i - 1] < = d[i - 3] and d[i] > = d[i - 2] - d[i - 4] and d[i - 1] + d[i - 5] > = d[i - 3]:
88
+ return True
89
+ return False
61
90
` ` `
62
91
63
92
# ## **Java**
64
93
65
94
< ! -- 这里可写当前语言的特殊实现逻辑 -->
66
95
67
96
` ` ` java
97
+ class Solution {
98
+ public boolean isSelfCrossing(int[] distance) {
99
+ int[] d = distance;
100
+ for (int i = 3; i < d.length; ++i) {
101
+ if (d[i] > = d[i - 2] && d[i - 1] < = d[i - 3]) {
102
+ return true ;
103
+ }
104
+ if (i > = 4 && d[i - 1] == d[i - 3] && d[i] + d[i - 4] > = d[i - 2]) {
105
+ return true ;
106
+ }
107
+ if (i > = 5 && d[i - 2] > = d[i - 4] && d[i - 1] < = d[i - 3] && d[i] > = d[i - 2] - d[i - 4] && d[i - 1] + d[i - 5] > = d[i - 3]) {
108
+ return true ;
109
+ }
110
+ }
111
+ return false ;
112
+ }
113
+ }
114
+ ` ` `
115
+
116
+ # ## **C++**
117
+
118
+ ` ` ` cpp
119
+ class Solution {
120
+ public:
121
+ bool isSelfCrossing(vector< int>& distance) {
122
+ vector< int> d = distance;
123
+ for (int i = 3; i < d.size (); ++i)
124
+ {
125
+ if (d[i] > = d[i - 2] && d[i - 1] < = d[i - 3]) return true ;
126
+ if (i > = 4 && d[i - 1] == d[i - 3] && d[i] + d[i - 4] > = d[i - 2]) return true ;
127
+ if (i > = 5 && d[i - 2] > = d[i - 4] && d[i - 1] < = d[i - 3] && d[i] > = d[i - 2] - d[i - 4] && d[i - 1] + d[i - 5] > = d[i - 3]) return true ;
128
+ }
129
+ return false ;
130
+ }
131
+ };
132
+ ` ` `
68
133
134
+ # ## **Go**
135
+
136
+ ` ` ` go
137
+ func isSelfCrossing(distance []int) bool {
138
+ d := distance
139
+ for i := 3; i < len(d); i++ {
140
+ if d[i] > = d[i-2] && d[i-1] < = d[i-3] {
141
+ return true
142
+ }
143
+ if i > = 4 && d[i-1] == d[i-3] && d[i]+d[i-4] > = d[i-2] {
144
+ return true
145
+ }
146
+ if i > = 5 && d[i-2] > = d[i-4] && d[i-1] < = d[i-3] && d[i] > = d[i-2]-d[i-4] && d[i-1]+d[i-5] > = d[i-3] {
147
+ return true
148
+ }
149
+ }
150
+ return false
151
+ }
69
152
` ` `
70
153
71
154
# ## **...**
Original file line number Diff line number Diff line change 46
46
47
47
## Solutions
48
48
49
+ ``` bash
50
+ i-2
51
+ case 1 : i-1┌─┐
52
+ └─┼─> i
53
+ i-3
54
+
55
+ i-2
56
+ case 2 : i-1 ┌────┐
57
+ └─══> ┘i-3
58
+ i i-4
59
+
60
+ case 3 : i-4
61
+ ┌──┐
62
+ │i< ┼─┐
63
+ i-3│ i-5│i-1
64
+ └────┘
65
+ i-2
66
+ ` ` `
67
+
49
68
< ! -- tabs:start -->
50
69
51
70
# ## **Python3**
52
71
53
72
` ` ` python
54
-
73
+ class Solution:
74
+ def isSelfCrossing(self, distance: List[int]) -> bool:
75
+ d = distance
76
+ for i in range(3, len(d)):
77
+ if d[i] > = d[i - 2] and d[i - 1] < = d[i - 3]:
78
+ return True
79
+ if i > = 4 and d[i - 1] == d[i - 3] and d[i] + d[i - 4] > = d[i - 2]:
80
+ return True
81
+ if i > = 5 and d[i - 2] > = d[i - 4] and d[i - 1] < = d[i - 3] and d[i] > = d[i - 2] - d[i - 4] and d[i - 1] + d[i - 5] > = d[i - 3]:
82
+ return True
83
+ return False
55
84
` ` `
56
85
57
86
# ## **Java**
58
87
59
88
` ` ` java
89
+ class Solution {
90
+ public boolean isSelfCrossing(int[] distance) {
91
+ int[] d = distance;
92
+ for (int i = 3; i < d.length; ++i) {
93
+ if (d[i] > = d[i - 2] && d[i - 1] < = d[i - 3]) {
94
+ return true ;
95
+ }
96
+ if (i > = 4 && d[i - 1] == d[i - 3] && d[i] + d[i - 4] > = d[i - 2]) {
97
+ return true ;
98
+ }
99
+ if (i > = 5 && d[i - 2] > = d[i - 4] && d[i - 1] < = d[i - 3] && d[i] > = d[i - 2] - d[i - 4] && d[i - 1] + d[i - 5] > = d[i - 3]) {
100
+ return true ;
101
+ }
102
+ }
103
+ return false ;
104
+ }
105
+ }
106
+ ` ` `
107
+
108
+ # ## **C++**
109
+
110
+ ` ` ` cpp
111
+ class Solution {
112
+ public:
113
+ bool isSelfCrossing(vector< int>& distance) {
114
+ vector< int> d = distance;
115
+ for (int i = 3; i < d.size (); ++i)
116
+ {
117
+ if (d[i] > = d[i - 2] && d[i - 1] < = d[i - 3]) return true ;
118
+ if (i > = 4 && d[i - 1] == d[i - 3] && d[i] + d[i - 4] > = d[i - 2]) return true ;
119
+ if (i > = 5 && d[i - 2] > = d[i - 4] && d[i - 1] < = d[i - 3] && d[i] > = d[i - 2] - d[i - 4] && d[i - 1] + d[i - 5] > = d[i - 3]) return true ;
120
+ }
121
+ return false ;
122
+ }
123
+ };
124
+ ` ` `
60
125
126
+ # ## **Go**
127
+
128
+ ` ` ` go
129
+ func isSelfCrossing(distance []int) bool {
130
+ d := distance
131
+ for i := 3; i < len(d); i++ {
132
+ if d[i] > = d[i-2] && d[i-1] < = d[i-3] {
133
+ return true
134
+ }
135
+ if i > = 4 && d[i-1] == d[i-3] && d[i]+d[i-4] > = d[i-2] {
136
+ return true
137
+ }
138
+ if i > = 5 && d[i-2] > = d[i-4] && d[i-1] < = d[i-3] && d[i] > = d[i-2]-d[i-4] && d[i-1]+d[i-5] > = d[i-3] {
139
+ return true
140
+ }
141
+ }
142
+ return false
143
+ }
61
144
` ` `
62
145
63
146
# ## **...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ bool isSelfCrossing (vector<int >& distance) {
4
+ vector<int > d = distance;
5
+ for (int i = 3 ; i < d.size (); ++i)
6
+ {
7
+ if (d[i] >= d[i - 2 ] && d[i - 1 ] <= d[i - 3 ]) return true ;
8
+ if (i >= 4 && d[i - 1 ] == d[i - 3 ] && d[i] + d[i - 4 ] >= d[i - 2 ]) return true ;
9
+ if (i >= 5 && d[i - 2 ] >= d[i - 4 ] && d[i - 1 ] <= d[i - 3 ] && d[i] >= d[i - 2 ] - d[i - 4 ] && d[i - 1 ] + d[i - 5 ] >= d[i - 3 ]) return true ;
10
+ }
11
+ return false ;
12
+ }
13
+ };
Original file line number Diff line number Diff line change
1
+ func isSelfCrossing (distance []int ) bool {
2
+ d := distance
3
+ for i := 3 ; i < len (d ); i ++ {
4
+ if d [i ] >= d [i - 2 ] && d [i - 1 ] <= d [i - 3 ] {
5
+ return true
6
+ }
7
+ if i >= 4 && d [i - 1 ] == d [i - 3 ] && d [i ]+ d [i - 4 ] >= d [i - 2 ] {
8
+ return true
9
+ }
10
+ if i >= 5 && d [i - 2 ] >= d [i - 4 ] && d [i - 1 ] <= d [i - 3 ] && d [i ] >= d [i - 2 ]- d [i - 4 ] && d [i - 1 ]+ d [i - 5 ] >= d [i - 3 ] {
11
+ return true
12
+ }
13
+ }
14
+ return false
15
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public boolean isSelfCrossing (int [] distance ) {
3
+ int [] d = distance ;
4
+ for (int i = 3 ; i < d .length ; ++i ) {
5
+ if (d [i ] >= d [i - 2 ] && d [i - 1 ] <= d [i - 3 ]) {
6
+ return true ;
7
+ }
8
+ if (i >= 4 && d [i - 1 ] == d [i - 3 ] && d [i ] + d [i - 4 ] >= d [i - 2 ]) {
9
+ return true ;
10
+ }
11
+ if (i >= 5 && d [i - 2 ] >= d [i - 4 ] && d [i - 1 ] <= d [i - 3 ] && d [i ] >= d [i - 2 ] - d [i - 4 ] && d [i - 1 ] + d [i - 5 ] >= d [i - 3 ]) {
12
+ return true ;
13
+ }
14
+ }
15
+ return false ;
16
+ }
17
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def isSelfCrossing (self , distance : List [int ]) -> bool :
3
+ d = distance
4
+ for i in range (3 , len (d )):
5
+ if d [i ] >= d [i - 2 ] and d [i - 1 ] <= d [i - 3 ]:
6
+ return True
7
+ if i >= 4 and d [i - 1 ] == d [i - 3 ] and d [i ] + d [i - 4 ] >= d [i - 2 ]:
8
+ return True
9
+ if i >= 5 and d [i - 2 ] >= d [i - 4 ] and d [i - 1 ] <= d [i - 3 ] and d [i ] >= d [i - 2 ] - d [i - 4 ] and d [i - 1 ] + d [i - 5 ] >= d [i - 3 ]:
10
+ return True
11
+ return False
You can’t perform that action at this time.
0 commit comments