Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 093a0b6

Browse files
feat: add solutions to lc problem: No.2210,2211 (#767)
- No.2210.Count Hills and Valleys in an Array - No.2211.Count Collisions on a Road
1 parent 60d2cef commit 093a0b6

File tree

9 files changed

+252
-16
lines changed

9 files changed

+252
-16
lines changed

‎solution/2200-2299/2210.Count Hills and Valleys in an Array/README.md‎

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,62 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
先处理数组 `nums`,把连续的都变成一个,比如 `[6, 6, 5, 5, 4, 1]`,转换为 `[6, 5, 4, 1]` 之后,再进行比较。
60+
61+
优化:
62+
63+
可以使用双指针的方式,忽略相邻重复的元素,而无需改动原数组。
64+
5965
<!-- tabs:start -->
6066

6167
### **Python3**
6268

6369
<!-- 这里可写当前语言的特殊实现逻辑 -->
6470

6571
```python
66-
72+
class Solution:
73+
def countHillValley(self, nums: List[int]) -> int:
74+
count = 0
75+
pt = 0
76+
while pt < len(nums)-1:
77+
if nums[pt] == nums[pt+1]:
78+
nums.pop(pt)
79+
continue
80+
else:
81+
pt += 1
82+
for i in range(1, len(nums)-1):
83+
if nums[i] < nums[i+1] and nums[i-1] > nums[i]:
84+
count += 1
85+
continue
86+
elif nums[i] > nums[i+1] and nums[i] > nums[i-1]:
87+
count += 1
88+
continue
89+
return count
6790
```
6891

6992
### **Java**
7093

7194
<!-- 这里可写当前语言的特殊实现逻辑 -->
7295

7396
```java
74-
97+
class Solution {
98+
public int countHillValley(int[] nums) {
99+
int count = 0;
100+
for(int i = 1,j = 0; i < nums.length-1; i++) {
101+
if(nums[i] == nums[i+1]) {
102+
continue;
103+
}
104+
if(nums[i] > nums[j] && nums[i] > nums[i+1]) {
105+
count++;
106+
}
107+
if(nums[i] < nums[j] && nums[i] < nums[i+1]){
108+
count++;
109+
}
110+
j = i;
111+
}
112+
return count;
113+
}
114+
}
75115
```
76116

77117
### **TypeScript**

‎solution/2200-2299/2210.Count Hills and Valleys in an Array/README_EN.md‎

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,51 @@ There are 0 hills and valleys so we return 0.
5454
<!-- tabs:start -->
5555

5656
### **Python3**
57+
First make the consecutive duplicate value to be unique with the side values.
5758

5859
```python
59-
60+
class Solution:
61+
def countHillValley(self, nums: List[int]) -> int:
62+
count = 0
63+
pt = 0
64+
while pt < len(nums)-1:
65+
if nums[pt] == nums[pt+1]:
66+
nums.pop(pt)
67+
continue
68+
else:
69+
pt += 1
70+
for i in range(1, len(nums)-1):
71+
if nums[i] < nums[i+1] and nums[i-1] > nums[i]:
72+
count += 1
73+
continue
74+
elif nums[i] > nums[i+1] and nums[i] > nums[i-1]:
75+
count += 1
76+
continue
77+
return count
6078
```
6179

6280
### **Java**
81+
Use two pointers to solve the problem
6382

6483
```java
65-
84+
class Solution {
85+
public int countHillValley(int[] nums) {
86+
int count = 0;
87+
for(int i = 1,j = 0; i < nums.length-1; i++) {
88+
if(nums[i] == nums[i+1]) {
89+
continue;
90+
}
91+
if(nums[i] > nums[j] && nums[i] > nums[i+1]) {
92+
count++;
93+
}
94+
if(nums[i] < nums[j] && nums[i] < nums[i+1]){
95+
count++;
96+
}
97+
j = i;
98+
}
99+
return count;
100+
}
101+
}
66102
```
67103

68104
### **TypeScript**
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int countHillValley(int[] nums) {
3+
int count = 0;
4+
for (int i = 1, j = 0; i < nums.length - 1; i++) {
5+
if(nums[i] == nums[i+1]) {
6+
continue;
7+
}
8+
if(nums[i] > nums[j] && nums[i] > nums[i+1]) {
9+
count++;
10+
}
11+
if(nums[i] < nums[j] && nums[i] < nums[i+1]){
12+
count++;
13+
}
14+
j = i;
15+
}
16+
return count;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def countHillValley(self, nums: List[int]) -> int:
3+
count = 0
4+
pt = 0
5+
while pt < len(nums)-1:
6+
if nums[pt] == nums[pt+1]:
7+
nums.pop(pt)
8+
continue
9+
else:
10+
pt += 1
11+
for i in range(1, len(nums)-1):
12+
if nums[i] < nums[i+1] and nums[i-1] > nums[i]:
13+
count += 1
14+
continue
15+
elif nums[i] > nums[i+1] and nums[i] > nums[i-1]:
16+
count += 1
17+
continue
18+
return count

‎solution/2200-2299/2211.Count Collisions on a Road/README.md‎

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
## 解法
5858

5959
<!-- 这里可写通用的实现逻辑 -->
60+
这个题比较有意思,最后规律是左边向左的车辆可以出去,右边向右的车辆可以出去,中间不是S的都出不来
6061

6162
<!-- tabs:start -->
6263

@@ -65,15 +66,39 @@
6566
<!-- 这里可写当前语言的特殊实现逻辑 -->
6667

6768
```python
68-
69+
class Solution:
70+
def countCollisions(self, directions: str) -> int:
71+
l, r = 0, len(directions)-1
72+
while l <= r and directions[l] == 'L':
73+
l += 1
74+
while l <= r and directions[r] == 'R':
75+
r -= 1
76+
count = 0
77+
for i in range(l, r+1):
78+
count += directions[i] != 'S'
79+
return count
6980
```
7081

7182
### **Java**
7283

7384
<!-- 这里可写当前语言的特殊实现逻辑 -->
7485

7586
```java
76-
87+
class Solution {
88+
public int countCollisions(String directions) {
89+
int l = 0, r = directions.length() -1, count = 0;
90+
while (l <= r && directions.substring(l, l+1).equals("L")) {
91+
l++;
92+
}
93+
while (l <= r && directions.substring(r, r+1).equals("R")) {
94+
r--;
95+
}
96+
for (int i = l; i <=r; i++) {
97+
if (!directions.substring(i, i+1).equals("S")) count += 1;
98+
}
99+
return count;
100+
}
101+
}
77102
```
78103

79104
### **TypeScript**
@@ -82,10 +107,26 @@
82107

83108
```
84109

85-
### **...**
86-
87-
```
88-
110+
### **C++**
111+
112+
```cpp
113+
class Solution {
114+
public:
115+
int countCollisions(string directions) {
116+
int l = 0, r = directions.size() -1, count = 0;
117+
while (l <= r && directions[l] == 'L') {
118+
l++;
119+
}
120+
while (l <= r && directions[r] == 'R') {
121+
r--;
122+
}
123+
for (int i = l; i <=r; i++) {
124+
count += directions[i] != 'S';
125+
}
126+
return count;
127+
128+
}
129+
};
89130
```
90131

91132
<!-- tabs:end -->

‎solution/2200-2299/2211.Count Collisions on a Road/README_EN.md‎

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,37 @@ No cars will collide with each other. Thus, the total number of collisions that
5757
### **Python3**
5858

5959
```python
60-
60+
class Solution:
61+
def countCollisions(self, directions: str) -> int:
62+
l, r = 0, len(directions)-1
63+
while l <= r and directions[l] == 'L':
64+
l += 1
65+
while l <= r and directions[r] == 'R':
66+
r -= 1
67+
count = 0
68+
for i in range(l, r+1):
69+
count += directions[i] != 'S'
70+
return count
6171
```
6272

6373
### **Java**
6474

6575
```java
66-
76+
class Solution {
77+
public int countCollisions(String directions) {
78+
int l = 0, r = directions.length() -1, count = 0;
79+
while (l <= r && directions.substring(l, l+1).equals("L")) {
80+
l++;
81+
}
82+
while (l <= r && directions.substring(r, r+1).equals("R")) {
83+
r--;
84+
}
85+
for (int i = l; i <=r; i++) {
86+
if (!directions.substring(i, i+1).equals("S")) count += 1;
87+
}
88+
return count;
89+
}
90+
}
6791
```
6892

6993
### **TypeScript**
@@ -72,10 +96,26 @@ No cars will collide with each other. Thus, the total number of collisions that
7296

7397
```
7498

75-
### **...**
76-
77-
```
78-
99+
### **C++**
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
int countCollisions(string directions) {
105+
int l = 0, r = directions.size() -1, count = 0;
106+
while (l <= r && directions[l] == 'L') {
107+
l++;
108+
}
109+
while (l <= r && directions[r] == 'R') {
110+
r--;
111+
}
112+
for (int i = l; i <=r; i++) {
113+
count += directions[i] != 'S';
114+
}
115+
return count;
116+
117+
}
118+
};
79119
```
80120

81121
<!-- tabs:end -->
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
int countCollisions(string directions) {
4+
int l = 0, r = directions.size() -1, count = 0;
5+
while (l <= r && directions[l] == 'L') {
6+
l++;
7+
}
8+
while (l <= r && directions[r] == 'R') {
9+
r--;
10+
}
11+
for (int i = l; i <=r; i++) {
12+
count += directions[i] != 'S';
13+
}
14+
return count;
15+
16+
}
17+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int countCollisions(String directions) {
3+
int l = 0, r = directions.length() -1, count = 0;
4+
while (l <= r && directions.substring(l, l+1).equals("L")) {
5+
l++;
6+
}
7+
while (l <= r && directions.substring(r, r+1).equals("R")) {
8+
r--;
9+
}
10+
for (int i = l; i <=r; i++) {
11+
if (!directions.substring(i, i+1).equals("S")) count += 1;
12+
}
13+
return count;
14+
}
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def countCollisions(self, directions: str) -> int:
3+
l, r = 0, len(directions)-1
4+
while l <= r and directions[l] == 'L':
5+
l += 1
6+
while l <= r and directions[r] == 'R':
7+
r -= 1
8+
count = 0
9+
for i in range(l, r+1):
10+
count += directions[i] != 'S'
11+
return count

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /