Skip to content

Commit 5a94bc4

Browse files
authored
feat: add solutions to lc problem: No.2163 (#4574)
No.2163.Minimum Difference in Sums After Removal of Elements
1 parent cf8049e commit 5a94bc4

File tree

7 files changed

+175
-24
lines changed

7 files changed

+175
-24
lines changed

solution/0800-0899/0871.Minimum Number of Refueling Stops/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,14 @@ func (h *hp) Pop() any {
206206

207207
```ts
208208
function minRefuelStops(target: number, startFuel: number, stations: number[][]): number {
209-
const pq = new MaxPriorityQueue();
209+
const pq = new MaxPriorityQueue<number>();
210210
let [ans, pre] = [0, 0];
211211
stations.push([target, 0]);
212212
for (const [pos, fuel] of stations) {
213213
const dist = pos - pre;
214214
startFuel -= dist;
215215
while (startFuel < 0 && !pq.isEmpty()) {
216-
startFuel += pq.dequeue().element;
216+
startFuel += pq.dequeue();
217217
ans++;
218218
}
219219
if (startFuel < 0) {

solution/0800-0899/0871.Minimum Number of Refueling Stops/README_EN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,14 @@ func (h *hp) Pop() any {
203203

204204
```ts
205205
function minRefuelStops(target: number, startFuel: number, stations: number[][]): number {
206-
const pq = new MaxPriorityQueue();
206+
const pq = new MaxPriorityQueue<number>();
207207
let [ans, pre] = [0, 0];
208208
stations.push([target, 0]);
209209
for (const [pos, fuel] of stations) {
210210
const dist = pos - pre;
211211
startFuel -= dist;
212212
while (startFuel < 0 && !pq.isEmpty()) {
213-
startFuel += pq.dequeue().element;
213+
startFuel += pq.dequeue();
214214
ans++;
215215
}
216216
if (startFuel < 0) {

solution/0800-0899/0871.Minimum Number of Refueling Stops/Solution.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
function minRefuelStops(target: number, startFuel: number, stations: number[][]): number {
2-
const pq = new MaxPriorityQueue();
2+
const pq = new MaxPriorityQueue<number>();
33
let [ans, pre] = [0, 0];
44
stations.push([target, 0]);
55
for (const [pos, fuel] of stations) {
66
const dist = pos - pre;
77
startFuel -= dist;
88
while (startFuel < 0 && !pq.isEmpty()) {
9-
startFuel += pq.dequeue().element;
9+
startFuel += pq.dequeue();
1010
ans++;
1111
}
1212
if (startFuel < 0) {

solution/2100-2199/2163.Minimum Difference in Sums After Removal of Elements/README.md

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -264,25 +264,25 @@ function minimumDifference(nums: number[]): number {
264264
const n = Math.floor(m / 3);
265265
let s = 0;
266266
const pre: number[] = Array(m + 1);
267-
const q1 = new MaxPriorityQueue();
267+
const q1 = new MaxPriorityQueue<number>();
268268
for (let i = 1; i <= n * 2; ++i) {
269269
const x = nums[i - 1];
270270
s += x;
271-
q1.enqueue(x, x);
271+
q1.enqueue(x);
272272
if (q1.size() > n) {
273-
s -= q1.dequeue().element;
273+
s -= q1.dequeue();
274274
}
275275
pre[i] = s;
276276
}
277277
s = 0;
278278
const suf: number[] = Array(m + 1);
279-
const q2 = new MinPriorityQueue();
279+
const q2 = new MinPriorityQueue<number>();
280280
for (let i = m; i > n; --i) {
281281
const x = nums[i - 1];
282282
s += x;
283-
q2.enqueue(x, x);
283+
q2.enqueue(x);
284284
if (q2.size() > n) {
285-
s -= q2.dequeue().element;
285+
s -= q2.dequeue();
286286
}
287287
suf[i] = s;
288288
}
@@ -294,6 +294,58 @@ function minimumDifference(nums: number[]): number {
294294
}
295295
```
296296

297+
#### Rust
298+
299+
```rust
300+
use std::collections::BinaryHeap;
301+
use std::cmp::Reverse;
302+
303+
impl Solution {
304+
pub fn minimum_difference(nums: Vec<i32>) -> i64 {
305+
let m = nums.len();
306+
let n = m / 3;
307+
let mut s = 0i64;
308+
let mut pre = vec![0i64; m + 1];
309+
let mut pq = BinaryHeap::new(); // max-heap
310+
311+
for i in 1..=2 * n {
312+
let x = nums[i - 1] as i64;
313+
s += x;
314+
pq.push(x);
315+
if pq.len() > n {
316+
if let Some(top) = pq.pop() {
317+
s -= top;
318+
}
319+
}
320+
pre[i] = s;
321+
}
322+
323+
s = 0;
324+
let mut suf = vec![0i64; m + 1];
325+
let mut pq = BinaryHeap::new();
326+
327+
for i in (n + 1..=m).rev() {
328+
let x = nums[i - 1] as i64;
329+
s += x;
330+
pq.push(Reverse(x));
331+
if pq.len() > n {
332+
if let Some(Reverse(top)) = pq.pop() {
333+
s -= top;
334+
}
335+
}
336+
suf[i] = s;
337+
}
338+
339+
let mut ans = i64::MAX;
340+
for i in n..=2 * n {
341+
ans = ans.min(pre[i] - suf[i + 1]);
342+
}
343+
344+
ans
345+
}
346+
}
347+
```
348+
297349
<!-- tabs:end -->
298350

299351
<!-- solution:end -->

solution/2100-2199/2163.Minimum Difference in Sums After Removal of Elements/README_EN.md

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -264,25 +264,25 @@ function minimumDifference(nums: number[]): number {
264264
const n = Math.floor(m / 3);
265265
let s = 0;
266266
const pre: number[] = Array(m + 1);
267-
const q1 = new MaxPriorityQueue();
267+
const q1 = new MaxPriorityQueue<number>();
268268
for (let i = 1; i <= n * 2; ++i) {
269269
const x = nums[i - 1];
270270
s += x;
271-
q1.enqueue(x, x);
271+
q1.enqueue(x);
272272
if (q1.size() > n) {
273-
s -= q1.dequeue().element;
273+
s -= q1.dequeue();
274274
}
275275
pre[i] = s;
276276
}
277277
s = 0;
278278
const suf: number[] = Array(m + 1);
279-
const q2 = new MinPriorityQueue();
279+
const q2 = new MinPriorityQueue<number>();
280280
for (let i = m; i > n; --i) {
281281
const x = nums[i - 1];
282282
s += x;
283-
q2.enqueue(x, x);
283+
q2.enqueue(x);
284284
if (q2.size() > n) {
285-
s -= q2.dequeue().element;
285+
s -= q2.dequeue();
286286
}
287287
suf[i] = s;
288288
}
@@ -294,6 +294,58 @@ function minimumDifference(nums: number[]): number {
294294
}
295295
```
296296

297+
#### Rust
298+
299+
```rust
300+
use std::collections::BinaryHeap;
301+
use std::cmp::Reverse;
302+
303+
impl Solution {
304+
pub fn minimum_difference(nums: Vec<i32>) -> i64 {
305+
let m = nums.len();
306+
let n = m / 3;
307+
let mut s = 0i64;
308+
let mut pre = vec![0i64; m + 1];
309+
let mut pq = BinaryHeap::new(); // max-heap
310+
311+
for i in 1..=2 * n {
312+
let x = nums[i - 1] as i64;
313+
s += x;
314+
pq.push(x);
315+
if pq.len() > n {
316+
if let Some(top) = pq.pop() {
317+
s -= top;
318+
}
319+
}
320+
pre[i] = s;
321+
}
322+
323+
s = 0;
324+
let mut suf = vec![0i64; m + 1];
325+
let mut pq = BinaryHeap::new();
326+
327+
for i in (n + 1..=m).rev() {
328+
let x = nums[i - 1] as i64;
329+
s += x;
330+
pq.push(Reverse(x));
331+
if pq.len() > n {
332+
if let Some(Reverse(top)) = pq.pop() {
333+
s -= top;
334+
}
335+
}
336+
suf[i] = s;
337+
}
338+
339+
let mut ans = i64::MAX;
340+
for i in n..=2 * n {
341+
ans = ans.min(pre[i] - suf[i + 1]);
342+
}
343+
344+
ans
345+
}
346+
}
347+
```
348+
297349
<!-- tabs:end -->
298350

299351
<!-- solution:end -->
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use std::cmp::Reverse;
2+
use std::collections::BinaryHeap;
3+
4+
impl Solution {
5+
pub fn minimum_difference(nums: Vec<i32>) -> i64 {
6+
let m = nums.len();
7+
let n = m / 3;
8+
let mut s = 0i64;
9+
let mut pre = vec![0i64; m + 1];
10+
let mut pq = BinaryHeap::new(); // max-heap
11+
12+
for i in 1..=2 * n {
13+
let x = nums[i - 1] as i64;
14+
s += x;
15+
pq.push(x);
16+
if pq.len() > n {
17+
if let Some(top) = pq.pop() {
18+
s -= top;
19+
}
20+
}
21+
pre[i] = s;
22+
}
23+
24+
s = 0;
25+
let mut suf = vec![0i64; m + 1];
26+
let mut pq = BinaryHeap::new();
27+
28+
for i in (n + 1..=m).rev() {
29+
let x = nums[i - 1] as i64;
30+
s += x;
31+
pq.push(Reverse(x));
32+
if pq.len() > n {
33+
if let Some(Reverse(top)) = pq.pop() {
34+
s -= top;
35+
}
36+
}
37+
suf[i] = s;
38+
}
39+
40+
let mut ans = i64::MAX;
41+
for i in n..=2 * n {
42+
ans = ans.min(pre[i] - suf[i + 1]);
43+
}
44+
45+
ans
46+
}
47+
}

solution/2100-2199/2163.Minimum Difference in Sums After Removal of Elements/Solution.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ function minimumDifference(nums: number[]): number {
33
const n = Math.floor(m / 3);
44
let s = 0;
55
const pre: number[] = Array(m + 1);
6-
const q1 = new MaxPriorityQueue();
6+
const q1 = new MaxPriorityQueue<number>();
77
for (let i = 1; i <= n * 2; ++i) {
88
const x = nums[i - 1];
99
s += x;
10-
q1.enqueue(x, x);
10+
q1.enqueue(x);
1111
if (q1.size() > n) {
12-
s -= q1.dequeue().element;
12+
s -= q1.dequeue();
1313
}
1414
pre[i] = s;
1515
}
1616
s = 0;
1717
const suf: number[] = Array(m + 1);
18-
const q2 = new MinPriorityQueue();
18+
const q2 = new MinPriorityQueue<number>();
1919
for (let i = m; i > n; --i) {
2020
const x = nums[i - 1];
2121
s += x;
22-
q2.enqueue(x, x);
22+
q2.enqueue(x);
2323
if (q2.size() > n) {
24-
s -= q2.dequeue().element;
24+
s -= q2.dequeue();
2525
}
2626
suf[i] = s;
2727
}

0 commit comments

Comments
 (0)