mirror of https://github.com/doocs/leetcode.git
feat: add solutions to lc problem: No.2163 (#4574)
No.2163.Minimum Difference in Sums After Removal of Elements
This commit is contained in:
parent
cf8049ed75
commit
5a94bc4374
|
|
@ -206,14 +206,14 @@ func (h *hp) Pop() any {
|
|||
|
||||
```ts
|
||||
function minRefuelStops(target: number, startFuel: number, stations: number[][]): number {
|
||||
const pq = new MaxPriorityQueue();
|
||||
const pq = new MaxPriorityQueue<number>();
|
||||
let [ans, pre] = [0, 0];
|
||||
stations.push([target, 0]);
|
||||
for (const [pos, fuel] of stations) {
|
||||
const dist = pos - pre;
|
||||
startFuel -= dist;
|
||||
while (startFuel < 0 && !pq.isEmpty()) {
|
||||
startFuel += pq.dequeue().element;
|
||||
startFuel += pq.dequeue();
|
||||
ans++;
|
||||
}
|
||||
if (startFuel < 0) {
|
||||
|
|
|
|||
|
|
@ -203,14 +203,14 @@ func (h *hp) Pop() any {
|
|||
|
||||
```ts
|
||||
function minRefuelStops(target: number, startFuel: number, stations: number[][]): number {
|
||||
const pq = new MaxPriorityQueue();
|
||||
const pq = new MaxPriorityQueue<number>();
|
||||
let [ans, pre] = [0, 0];
|
||||
stations.push([target, 0]);
|
||||
for (const [pos, fuel] of stations) {
|
||||
const dist = pos - pre;
|
||||
startFuel -= dist;
|
||||
while (startFuel < 0 && !pq.isEmpty()) {
|
||||
startFuel += pq.dequeue().element;
|
||||
startFuel += pq.dequeue();
|
||||
ans++;
|
||||
}
|
||||
if (startFuel < 0) {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
function minRefuelStops(target: number, startFuel: number, stations: number[][]): number {
|
||||
const pq = new MaxPriorityQueue();
|
||||
const pq = new MaxPriorityQueue<number>();
|
||||
let [ans, pre] = [0, 0];
|
||||
stations.push([target, 0]);
|
||||
for (const [pos, fuel] of stations) {
|
||||
const dist = pos - pre;
|
||||
startFuel -= dist;
|
||||
while (startFuel < 0 && !pq.isEmpty()) {
|
||||
startFuel += pq.dequeue().element;
|
||||
startFuel += pq.dequeue();
|
||||
ans++;
|
||||
}
|
||||
if (startFuel < 0) {
|
||||
|
|
|
|||
|
|
@ -264,25 +264,25 @@ function minimumDifference(nums: number[]): number {
|
|||
const n = Math.floor(m / 3);
|
||||
let s = 0;
|
||||
const pre: number[] = Array(m + 1);
|
||||
const q1 = new MaxPriorityQueue();
|
||||
const q1 = new MaxPriorityQueue<number>();
|
||||
for (let i = 1; i <= n * 2; ++i) {
|
||||
const x = nums[i - 1];
|
||||
s += x;
|
||||
q1.enqueue(x, x);
|
||||
q1.enqueue(x);
|
||||
if (q1.size() > n) {
|
||||
s -= q1.dequeue().element;
|
||||
s -= q1.dequeue();
|
||||
}
|
||||
pre[i] = s;
|
||||
}
|
||||
s = 0;
|
||||
const suf: number[] = Array(m + 1);
|
||||
const q2 = new MinPriorityQueue();
|
||||
const q2 = new MinPriorityQueue<number>();
|
||||
for (let i = m; i > n; --i) {
|
||||
const x = nums[i - 1];
|
||||
s += x;
|
||||
q2.enqueue(x, x);
|
||||
q2.enqueue(x);
|
||||
if (q2.size() > n) {
|
||||
s -= q2.dequeue().element;
|
||||
s -= q2.dequeue();
|
||||
}
|
||||
suf[i] = s;
|
||||
}
|
||||
|
|
@ -294,6 +294,58 @@ function minimumDifference(nums: number[]): number {
|
|||
}
|
||||
```
|
||||
|
||||
#### Rust
|
||||
|
||||
```rust
|
||||
use std::collections::BinaryHeap;
|
||||
use std::cmp::Reverse;
|
||||
|
||||
impl Solution {
|
||||
pub fn minimum_difference(nums: Vec<i32>) -> i64 {
|
||||
let m = nums.len();
|
||||
let n = m / 3;
|
||||
let mut s = 0i64;
|
||||
let mut pre = vec![0i64; m + 1];
|
||||
let mut pq = BinaryHeap::new(); // max-heap
|
||||
|
||||
for i in 1..=2 * n {
|
||||
let x = nums[i - 1] as i64;
|
||||
s += x;
|
||||
pq.push(x);
|
||||
if pq.len() > n {
|
||||
if let Some(top) = pq.pop() {
|
||||
s -= top;
|
||||
}
|
||||
}
|
||||
pre[i] = s;
|
||||
}
|
||||
|
||||
s = 0;
|
||||
let mut suf = vec![0i64; m + 1];
|
||||
let mut pq = BinaryHeap::new();
|
||||
|
||||
for i in (n + 1..=m).rev() {
|
||||
let x = nums[i - 1] as i64;
|
||||
s += x;
|
||||
pq.push(Reverse(x));
|
||||
if pq.len() > n {
|
||||
if let Some(Reverse(top)) = pq.pop() {
|
||||
s -= top;
|
||||
}
|
||||
}
|
||||
suf[i] = s;
|
||||
}
|
||||
|
||||
let mut ans = i64::MAX;
|
||||
for i in n..=2 * n {
|
||||
ans = ans.min(pre[i] - suf[i + 1]);
|
||||
}
|
||||
|
||||
ans
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!-- tabs:end -->
|
||||
|
||||
<!-- solution:end -->
|
||||
|
|
|
|||
|
|
@ -264,25 +264,25 @@ function minimumDifference(nums: number[]): number {
|
|||
const n = Math.floor(m / 3);
|
||||
let s = 0;
|
||||
const pre: number[] = Array(m + 1);
|
||||
const q1 = new MaxPriorityQueue();
|
||||
const q1 = new MaxPriorityQueue<number>();
|
||||
for (let i = 1; i <= n * 2; ++i) {
|
||||
const x = nums[i - 1];
|
||||
s += x;
|
||||
q1.enqueue(x, x);
|
||||
q1.enqueue(x);
|
||||
if (q1.size() > n) {
|
||||
s -= q1.dequeue().element;
|
||||
s -= q1.dequeue();
|
||||
}
|
||||
pre[i] = s;
|
||||
}
|
||||
s = 0;
|
||||
const suf: number[] = Array(m + 1);
|
||||
const q2 = new MinPriorityQueue();
|
||||
const q2 = new MinPriorityQueue<number>();
|
||||
for (let i = m; i > n; --i) {
|
||||
const x = nums[i - 1];
|
||||
s += x;
|
||||
q2.enqueue(x, x);
|
||||
q2.enqueue(x);
|
||||
if (q2.size() > n) {
|
||||
s -= q2.dequeue().element;
|
||||
s -= q2.dequeue();
|
||||
}
|
||||
suf[i] = s;
|
||||
}
|
||||
|
|
@ -294,6 +294,58 @@ function minimumDifference(nums: number[]): number {
|
|||
}
|
||||
```
|
||||
|
||||
#### Rust
|
||||
|
||||
```rust
|
||||
use std::collections::BinaryHeap;
|
||||
use std::cmp::Reverse;
|
||||
|
||||
impl Solution {
|
||||
pub fn minimum_difference(nums: Vec<i32>) -> i64 {
|
||||
let m = nums.len();
|
||||
let n = m / 3;
|
||||
let mut s = 0i64;
|
||||
let mut pre = vec![0i64; m + 1];
|
||||
let mut pq = BinaryHeap::new(); // max-heap
|
||||
|
||||
for i in 1..=2 * n {
|
||||
let x = nums[i - 1] as i64;
|
||||
s += x;
|
||||
pq.push(x);
|
||||
if pq.len() > n {
|
||||
if let Some(top) = pq.pop() {
|
||||
s -= top;
|
||||
}
|
||||
}
|
||||
pre[i] = s;
|
||||
}
|
||||
|
||||
s = 0;
|
||||
let mut suf = vec![0i64; m + 1];
|
||||
let mut pq = BinaryHeap::new();
|
||||
|
||||
for i in (n + 1..=m).rev() {
|
||||
let x = nums[i - 1] as i64;
|
||||
s += x;
|
||||
pq.push(Reverse(x));
|
||||
if pq.len() > n {
|
||||
if let Some(Reverse(top)) = pq.pop() {
|
||||
s -= top;
|
||||
}
|
||||
}
|
||||
suf[i] = s;
|
||||
}
|
||||
|
||||
let mut ans = i64::MAX;
|
||||
for i in n..=2 * n {
|
||||
ans = ans.min(pre[i] - suf[i + 1]);
|
||||
}
|
||||
|
||||
ans
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!-- tabs:end -->
|
||||
|
||||
<!-- solution:end -->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
use std::cmp::Reverse;
|
||||
use std::collections::BinaryHeap;
|
||||
|
||||
impl Solution {
|
||||
pub fn minimum_difference(nums: Vec<i32>) -> i64 {
|
||||
let m = nums.len();
|
||||
let n = m / 3;
|
||||
let mut s = 0i64;
|
||||
let mut pre = vec![0i64; m + 1];
|
||||
let mut pq = BinaryHeap::new(); // max-heap
|
||||
|
||||
for i in 1..=2 * n {
|
||||
let x = nums[i - 1] as i64;
|
||||
s += x;
|
||||
pq.push(x);
|
||||
if pq.len() > n {
|
||||
if let Some(top) = pq.pop() {
|
||||
s -= top;
|
||||
}
|
||||
}
|
||||
pre[i] = s;
|
||||
}
|
||||
|
||||
s = 0;
|
||||
let mut suf = vec![0i64; m + 1];
|
||||
let mut pq = BinaryHeap::new();
|
||||
|
||||
for i in (n + 1..=m).rev() {
|
||||
let x = nums[i - 1] as i64;
|
||||
s += x;
|
||||
pq.push(Reverse(x));
|
||||
if pq.len() > n {
|
||||
if let Some(Reverse(top)) = pq.pop() {
|
||||
s -= top;
|
||||
}
|
||||
}
|
||||
suf[i] = s;
|
||||
}
|
||||
|
||||
let mut ans = i64::MAX;
|
||||
for i in n..=2 * n {
|
||||
ans = ans.min(pre[i] - suf[i + 1]);
|
||||
}
|
||||
|
||||
ans
|
||||
}
|
||||
}
|
||||
|
|
@ -3,25 +3,25 @@ function minimumDifference(nums: number[]): number {
|
|||
const n = Math.floor(m / 3);
|
||||
let s = 0;
|
||||
const pre: number[] = Array(m + 1);
|
||||
const q1 = new MaxPriorityQueue();
|
||||
const q1 = new MaxPriorityQueue<number>();
|
||||
for (let i = 1; i <= n * 2; ++i) {
|
||||
const x = nums[i - 1];
|
||||
s += x;
|
||||
q1.enqueue(x, x);
|
||||
q1.enqueue(x);
|
||||
if (q1.size() > n) {
|
||||
s -= q1.dequeue().element;
|
||||
s -= q1.dequeue();
|
||||
}
|
||||
pre[i] = s;
|
||||
}
|
||||
s = 0;
|
||||
const suf: number[] = Array(m + 1);
|
||||
const q2 = new MinPriorityQueue();
|
||||
const q2 = new MinPriorityQueue<number>();
|
||||
for (let i = m; i > n; --i) {
|
||||
const x = nums[i - 1];
|
||||
s += x;
|
||||
q2.enqueue(x, x);
|
||||
q2.enqueue(x);
|
||||
if (q2.size() > n) {
|
||||
s -= q2.dequeue().element;
|
||||
s -= q2.dequeue();
|
||||
}
|
||||
suf[i] = s;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue