Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π·Π°Π΄Π°ΡΡ β 2551. Put Marbles in Bags.
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
- ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ²
weights
, Π³Π΄Π΅ weights[i]
β Π²Π΅Ρ i
-Π³ΠΎ ΠΊΡΡΠΊΠ° ΠΌΡΠ°ΠΌΠΎΡΠ°.
- Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅ ΠΊΡΡΠΊΠΈ Π½Π°
k
Π½Π΅ΠΏΡΡΡΡΡ
ΠΌΠ΅ΡΠΊΠΎΠ², ΡΠΎΠ±Π»ΡΠ΄Π°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°:
- ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΡΡΠΎΠΊ.
- ΠΡΠ»ΠΈ Π² ΠΌΠ΅ΡΠΊΠ΅ Π΅ΡΡΡ ΠΊΡΡΠΊΠΈ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ
i
ΠΈ j
, ΡΠΎ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Ρ
ΠΎΠ΄ΠΈΡΡ Π² ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠΊ.
- Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΊΠ° β ΡΡΠΎ ΡΡΠΌΠΌΠ° Π²Π΅ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΡΡΠΊΠ° Π² Π½ΡΠΌ, ΡΠΎ Π΅ΡΡΡ:
weights[i] + weights[j]
.
- ΠΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΡΠ°Π·Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΡΡ Π²ΡΠ΅Ρ
k
ΠΌΠ΅ΡΠΊΠΎΠ².
π‘ ΠΠ΄Π΅Ρ
ΠΡΠΈ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ Π½Π° k
ΠΏΠΎΠ΄ΡΡΠ΄ ΠΈΠ΄ΡΡΠΈΡ
ΠΌΠ΅ΡΠΊΠΎΠ² ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ k - 1
ΡΠ°Π·ΡΠ΅Π· ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΡΡΠΊΠ°ΠΌΠΈ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·ΡΠ΅Π· Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΈΡΠΎΠ³ΠΎΠ²ΡΡ ΡΡΠΌΠΌΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΡ Π²ΠΈΠ΄Π° weights[i] + weights[i+1]
,
Π³Π΄Π΅ i
β ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠ΅.

Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΡ Π·Π°Π΄Π°ΡΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π²ΡΠ±ΠΎΡΡ k - 1
ΠΏΠ°Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΠΊΡΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅:
- ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΡΡ ΡΡΠΌΠΌΡ (Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°),
- ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡ ΡΡΠΌΠΌΡ (Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°).
𧩠ΠΠ΅ΡΠ°Π»ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°
- ΠΠΎΡΡΠΈΡΠ°Π΅ΠΌ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ
ΠΏΠ°Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΠΊΡΡΠΊΠΎΠ²:
weights[i] + weights[i+1]
- ΠΡΡΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠΌΠΌΡ.
- ΠΠΎΠ·ΡΠΌΡΠΌ:
k - 1
Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ
ΡΡΠΌΠΌ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°,
k - 1
Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΡ
Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ.
- ΠΡΠ²Π΅Ρ β ΡΠ°Π·Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ ΡΡΠΌΠΌΠ°ΠΌΠΈ.
β±οΈ ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠΈ
- ΠΡΠ΅ΠΌΡ:
O(nΒ·log n)
β ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ· n - 1
ΠΏΠΎΠΏΠ°ΡΠ½ΡΡ
ΡΡΠΌΠΌ
- ΠΠ°ΠΌΡΡΡ:
O(n)
β Π½Π° Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ
ΡΡΠΌΠΌ
π§Ύ ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄
impl Solution {
pub fn put_marbles(weights: Vec<i32>, k: i32) -> i64 {
let k = k as usize;
// Compute pairwise sums of adjacent marbles
let mut adjacent_sums: Vec<i64> = weights
.windows(2)
.map(|pair| pair[0] as i64 + pair[1] as i64)
.collect();
// Sort the adjacent sums to prepare for min/max partition costs
adjacent_sums.sort_unstable();
// To get the minimum score, pick the smallest (k-1) adjacent sums
let min_score: i64 = adjacent_sums.iter().take(k - 1).sum();
// To get the maximum score, pick the largest (k-1) adjacent sums
let max_score: i64 = adjacent_sums.into_iter().rev().take(k - 1).sum();
// The result is the difference between the maximum and minimum scores
max_score - min_score
}
}
Tags: #rust #algorithms #optimization