ΠΠ°Π΄Π°ΡΠ°, ΡΡΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π³ΠΎΠ΄Π½Ρ - 2948. Make Lexicographically Smallest Array by Swapping Elements
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
- ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠΈΡΠ΅Π»
nums
ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ limit
.
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°
nums[i]
ΠΈ nums[j]
, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅:
|nums[i] - nums[j]| <= limit
.
- ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»Π΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², Π²ΡΠΏΠΎΠ»Π½ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·.
ΠΠ΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ: ΠΠ°ΡΡΠΈΠ² a
ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° b
, Π΅ΡΠ»ΠΈ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ i
, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ, a[i] < b[i]
.
π‘ ΠΠ΄Π΅Ρ:
ΠΡΠ΄Π΅ΠΌ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡ:
- ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ
Π³ΡΡΠΏΠΏ, Π³Π΄Π΅ (ΠΏΠΎΡΠ»Π΅ Π΅Ρ Π²ΡΡΠ΅Π·Π°Π½ΠΈΡ ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ) Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅:
|nums[group[i+1]] - nums[group[i]]| <= limit
.
- ΠΠ½Π΄Π΅ΠΊΡΠ½Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ
nums
ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ Π½Π°ΠΉΡΠΈ Π³ΡΡΠΏΠΏΡ, Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
- Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ
Π³ΡΡΠΏΠΏ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
π ΠΠ΅ΡΠ°Π»ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°:
-
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²: ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π³Π΅ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²
sorted_indices
, Π·Π°ΠΏΠΎΠ»Π½ΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ [0, 1, ..., n-1]
. ΠΠ°ΡΠ΅ΠΌ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° nums, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
-
Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³ΡΡΠΏΠΏΡ: ΠΡΠΎΡ
ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ ΠΈΡ
Π² Π³ΡΡΠΏΠΏΡ, Π³Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅:
|nums[sorted_indices[i+1]] - nums[sorted_indices[i]]| <= limit
.
-
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π³ΡΡΠΏΠΏ: Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²
sorted_groups
ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡ sorted_indices
. ΠΡΡΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ°.
-
Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ°: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±Π° Π½Π°Π±ΠΎΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Ρ:
answer[sorted_groups[i]] = nums[sorted_indices[i]];
π ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ°:
-
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ:
O(n * log(n))
- Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ
O(n * log(n))
.
- Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²Π½ΡΡΡΠΈ Π³ΡΡΠΏΠΏ ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ
O(n * log(n))
, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅.
-
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ:
O(n)
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ²
sorted_indices
, sorted_groups
ΠΈ answer
ΡΡΠ΅Π±ΡΠ΅Ρ O(n)
ΠΏΠ°ΠΌΡΡΠΈ.
π» ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄:
impl Solution {
pub fn lexicographically_smallest_array(nums: Vec<i32>, limit: i32) -> Vec<i32> {
let n = nums.len();
// Initialize sorted_indices to track the original positions of elements.
let mut sorted_indices: Vec<usize> = (0..n).collect();
// Sort sorted_indices based on the values in nums.
sorted_indices.sort_unstable_by_key(|&i| nums[i]);
// Prepare a new array for grouping indices that can be freely swapped.
let mut sorted_groups = sorted_indices.clone();
// Divide the indices into groups where swaps are allowed, and sort each group.
let mut left = 0;
for right in 1..=n {
if right == n || nums[sorted_indices[right]] > nums[sorted_indices[right - 1]] + limit {
sorted_groups[left..right].sort_unstable();
left = right;
}
}
// Create the final answer array by rearranging elements based on the sorted indices.
let mut answer = vec![0; n];
for i in 0..n {
answer[sorted_groups[i]] = nums[sorted_indices[i]];
}
answer
}
}
Tags:Β #rust #algorithms #sort