Skip to content

Commit 648bfde

Browse files
committedOct 29, 2021
feat: add solutions to lc problem: No.0335.Self Crossing
1 parent 20a8d76 commit 648bfde

File tree

6 files changed

+224
-2
lines changed

6 files changed

+224
-2
lines changed
 

Diff for: ‎solution/0300-0399/0335.Self Crossing/README.md

+84-1
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,105 @@
5050

5151
<!-- 这里可写通用的实现逻辑 -->
5252

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+
5372
<!-- tabs:start -->
5473
5574
### **Python3**
5675
5776
<!-- 这里可写当前语言的特殊实现逻辑 -->
5877
5978
```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
6190
```
6291
6392
### **Java**
6493
6594
<!-- 这里可写当前语言的特殊实现逻辑 -->
6695
6796
```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+
```
68133
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+
}
69152
```
70153
71154
### **...**

Diff for: ‎solution/0300-0399/0335.Self Crossing/README_EN.md

+84-1
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,101 @@
4646

4747
## Solutions
4848

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+
4968
<!-- tabs:start -->
5069
5170
### **Python3**
5271
5372
```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
5584
```
5685
5786
### **Java**
5887
5988
```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+
```
60125
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+
}
61144
```
62145
63146
### **...**

Diff for: ‎solution/0300-0399/0335.Self Crossing/Solution.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
};

Diff for: ‎solution/0300-0399/0335.Self Crossing/Solution.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
}

Diff for: ‎solution/0300-0399/0335.Self Crossing/Solution.java

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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+
}

Diff for: ‎solution/0300-0399/0335.Self Crossing/Solution.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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

0 commit comments

Comments
 (0)
Please sign in to comment.