Skip to content

Commit 5e65775

Browse files
committed
feat: add solutions to lc problem: No.2210,2212
- No.2210.Count Hills and Valleys in an Array - No.2212.Maximum Points in an Archery Competition
1 parent 2e87e8f commit 5e65775

File tree

8 files changed

+277
-0
lines changed

8 files changed

+277
-0
lines changed

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,47 @@ func countHillValley(nums []int) int {
161161
### **TypeScript**
162162

163163
```ts
164+
function countHillValley(nums: number[]): number {
165+
const n = nums.length;
166+
let res = 0;
167+
let prev = nums[0];
168+
for (let i = 1; i < n - 1; i++) {
169+
const num = nums[i];
170+
const next = nums[i + 1];
171+
if (num == next) {
172+
continue;
173+
}
174+
if ((num > prev && num > next) || (num < prev && num < next)) {
175+
res += 1;
176+
}
177+
prev = num;
178+
}
179+
return res;
180+
}
181+
```
164182

183+
### **Rust**
184+
185+
```rust
186+
impl Solution {
187+
pub fn count_hill_valley(nums: Vec<i32>) -> i32 {
188+
let n = nums.len();
189+
let mut res = 0;
190+
let mut prev = nums[0];
191+
for i in 1..n - 1 {
192+
let num = nums[i];
193+
let next = nums[i + 1];
194+
if num == next {
195+
continue;
196+
}
197+
if num > prev && num > next || num < prev && num < next {
198+
res += 1;
199+
}
200+
prev = num;
201+
}
202+
res
203+
}
204+
}
165205
```
166206

167207
### **...**

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,47 @@ func countHillValley(nums []int) int {
150150
### **TypeScript**
151151

152152
```ts
153+
function countHillValley(nums: number[]): number {
154+
const n = nums.length;
155+
let res = 0;
156+
let prev = nums[0];
157+
for (let i = 1; i < n - 1; i++) {
158+
const num = nums[i];
159+
const next = nums[i + 1];
160+
if (num == next) {
161+
continue;
162+
}
163+
if ((num > prev && num > next) || (num < prev && num < next)) {
164+
res += 1;
165+
}
166+
prev = num;
167+
}
168+
return res;
169+
}
170+
```
153171

172+
### **Rust**
173+
174+
```rust
175+
impl Solution {
176+
pub fn count_hill_valley(nums: Vec<i32>) -> i32 {
177+
let n = nums.len();
178+
let mut res = 0;
179+
let mut prev = nums[0];
180+
for i in 1..n - 1 {
181+
let num = nums[i];
182+
let next = nums[i + 1];
183+
if num == next {
184+
continue;
185+
}
186+
if num > prev && num > next || num < prev && num < next {
187+
res += 1;
188+
}
189+
prev = num;
190+
}
191+
res
192+
}
193+
}
154194
```
155195

156196
### **...**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
impl Solution {
2+
pub fn count_hill_valley(nums: Vec<i32>) -> i32 {
3+
let n = nums.len();
4+
let mut res = 0;
5+
let mut prev = nums[0];
6+
for i in 1..n - 1 {
7+
let num = nums[i];
8+
let next = nums[i + 1];
9+
if num == next {
10+
continue;
11+
}
12+
if num > prev && num > next || num < prev && num < next {
13+
res += 1;
14+
}
15+
prev = num;
16+
}
17+
res
18+
}
19+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function countHillValley(nums: number[]): number {
2+
const n = nums.length;
3+
let res = 0;
4+
let prev = nums[0];
5+
for (let i = 1; i < n - 1; i++) {
6+
const num = nums[i];
7+
const next = nums[i + 1];
8+
if (num == next) {
9+
continue;
10+
}
11+
if ((num > prev && num > next) || (num < prev && num < next)) {
12+
res += 1;
13+
}
14+
prev = num;
15+
}
16+
return res;
17+
}

solution/2200-2299/2212.Maximum Points in an Archery Competition/README.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,62 @@ Bob 获得总分 8 + 9 + 10 = 27 。
9393
### **TypeScript**
9494

9595
```ts
96+
function maximumBobPoints(numArrows: number, aliceArrows: number[]): number[] {
97+
const dfs = (arr: number[], i: number, c: number): number[] => {
98+
if (i < 0 || c === 0) {
99+
arr[0] += c;
100+
return arr;
101+
}
102+
const a1 = dfs([...arr], i - 1, c);
103+
if (c > aliceArrows[i]) {
104+
arr[i] = aliceArrows[i] + 1;
105+
const a2 = dfs(arr, i - 1, c - aliceArrows[i] - 1);
106+
if (
107+
a2.reduce((p, v, i) => p + (v > 0 ? i : 0), 0) >=
108+
a1.reduce((p, v, i) => p + (v > 0 ? i : 0), 0)
109+
) {
110+
return a2;
111+
}
112+
}
113+
return a1;
114+
};
115+
return dfs(new Array(12).fill(0), 11, numArrows);
116+
}
117+
```
96118

119+
### **Rust**
120+
121+
```rust
122+
impl Solution {
123+
fn dfs(alice_arrows: &Vec<i32>, mut res: Vec<i32>, count: i32, i: usize) -> Vec<i32> {
124+
if i == 0 || count == 0 {
125+
res[0] += count;
126+
return res;
127+
}
128+
let r1 = Self::dfs(alice_arrows, res.clone(), count, i - 1);
129+
if count > alice_arrows[i] {
130+
res[i] = alice_arrows[i] + 1;
131+
let r2 = Self::dfs(alice_arrows, res, count - alice_arrows[i] - 1, i - 1);
132+
if r2
133+
.iter()
134+
.enumerate()
135+
.map(|(i, v)| if v > &0 { i } else { 0 })
136+
.sum::<usize>()
137+
> r1.iter()
138+
.enumerate()
139+
.map(|(i, v)| if v > &0 { i } else { 0 })
140+
.sum::<usize>()
141+
{
142+
return r2;
143+
}
144+
}
145+
r1
146+
}
147+
148+
pub fn maximum_bob_points(num_arrows: i32, alice_arrows: Vec<i32>) -> Vec<i32> {
149+
Self::dfs(&alice_arrows, vec![0; 12], num_arrows, 11)
150+
}
151+
}
97152
```
98153

99154
### **...**

solution/2200-2299/2212.Maximum Points in an Archery Competition/README_EN.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,62 @@ It can be shown that Bob cannot obtain a score higher than 27 points.
7979
### **TypeScript**
8080

8181
```ts
82+
function maximumBobPoints(numArrows: number, aliceArrows: number[]): number[] {
83+
const dfs = (arr: number[], i: number, c: number): number[] => {
84+
if (i < 0 || c === 0) {
85+
arr[0] += c;
86+
return arr;
87+
}
88+
const a1 = dfs([...arr], i - 1, c);
89+
if (c > aliceArrows[i]) {
90+
arr[i] = aliceArrows[i] + 1;
91+
const a2 = dfs(arr, i - 1, c - aliceArrows[i] - 1);
92+
if (
93+
a2.reduce((p, v, i) => p + (v > 0 ? i : 0), 0) >=
94+
a1.reduce((p, v, i) => p + (v > 0 ? i : 0), 0)
95+
) {
96+
return a2;
97+
}
98+
}
99+
return a1;
100+
};
101+
return dfs(new Array(12).fill(0), 11, numArrows);
102+
}
103+
```
82104

105+
### **Rust**
106+
107+
```rust
108+
impl Solution {
109+
fn dfs(alice_arrows: &Vec<i32>, mut res: Vec<i32>, count: i32, i: usize) -> Vec<i32> {
110+
if i == 0 || count == 0 {
111+
res[0] += count;
112+
return res;
113+
}
114+
let r1 = Self::dfs(alice_arrows, res.clone(), count, i - 1);
115+
if count > alice_arrows[i] {
116+
res[i] = alice_arrows[i] + 1;
117+
let r2 = Self::dfs(alice_arrows, res, count - alice_arrows[i] - 1, i - 1);
118+
if r2
119+
.iter()
120+
.enumerate()
121+
.map(|(i, v)| if v > &0 { i } else { 0 })
122+
.sum::<usize>()
123+
> r1.iter()
124+
.enumerate()
125+
.map(|(i, v)| if v > &0 { i } else { 0 })
126+
.sum::<usize>()
127+
{
128+
return r2;
129+
}
130+
}
131+
r1
132+
}
133+
134+
pub fn maximum_bob_points(num_arrows: i32, alice_arrows: Vec<i32>) -> Vec<i32> {
135+
Self::dfs(&alice_arrows, vec![0; 12], num_arrows, 11)
136+
}
137+
}
83138
```
84139

85140
### **...**
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
impl Solution {
2+
fn dfs(alice_arrows: &Vec<i32>, mut res: Vec<i32>, count: i32, i: usize) -> Vec<i32> {
3+
if i == 0 || count == 0 {
4+
res[0] += count;
5+
return res;
6+
}
7+
let r1 = Self::dfs(alice_arrows, res.clone(), count, i - 1);
8+
if count > alice_arrows[i] {
9+
res[i] = alice_arrows[i] + 1;
10+
let r2 = Self::dfs(alice_arrows, res, count - alice_arrows[i] - 1, i - 1);
11+
if r2
12+
.iter()
13+
.enumerate()
14+
.map(|(i, v)| if v > &0 { i } else { 0 })
15+
.sum::<usize>()
16+
> r1.iter()
17+
.enumerate()
18+
.map(|(i, v)| if v > &0 { i } else { 0 })
19+
.sum::<usize>()
20+
{
21+
return r2;
22+
}
23+
}
24+
r1
25+
}
26+
27+
pub fn maximum_bob_points(num_arrows: i32, alice_arrows: Vec<i32>) -> Vec<i32> {
28+
Self::dfs(&alice_arrows, vec![0; 12], num_arrows, 11)
29+
}
30+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function maximumBobPoints(numArrows: number, aliceArrows: number[]): number[] {
2+
const dfs = (arr: number[], i: number, c: number): number[] => {
3+
if (i < 0 || c === 0) {
4+
arr[0] += c;
5+
return arr;
6+
}
7+
const a1 = dfs([...arr], i - 1, c);
8+
if (c > aliceArrows[i]) {
9+
arr[i] = aliceArrows[i] + 1;
10+
const a2 = dfs(arr, i - 1, c - aliceArrows[i] - 1);
11+
if (
12+
a2.reduce((p, v, i) => p + (v > 0 ? i : 0), 0) >=
13+
a1.reduce((p, v, i) => p + (v > 0 ? i : 0), 0)
14+
) {
15+
return a2;
16+
}
17+
}
18+
return a1;
19+
};
20+
return dfs(new Array(12).fill(0), 11, numArrows);
21+
}

0 commit comments

Comments
 (0)