Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ - 2661. First Completely Painted Row or Column ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΈΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² Π»ΠΎΠ±, ΠΈ Π·Π° ΡΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ (Ρ
ΠΎΡΡ ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΡΡΠ΅).
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
- ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ²
arr
ΠΈ ΠΌΠ°ΡΡΠΈΡΠ° mat
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠΈΡΠ»Π° ΠΎΡ 1
Π΄ΠΎ m * n
.
- ΠΠ°ΡΡΠΈΠ²
arr
Π·Π°Π΄Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π·Π°ΠΊΡΠ°ΡΠΊΠΈ ΡΡΠ΅Π΅ΠΊ ΠΌΠ°ΡΡΠΈΡΡ mat
(Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΠΉΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ).
- Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
arr = [2,8,7,4,1,3,5,6,9], mat = [[3,2,5],[1,4,6],[8,7,9]]
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ i
Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ arr
, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ:
- ΠΠΈΠ±ΠΎ Π²ΡΡ ΡΡΡΠΎΠΊΠ°, Π»ΠΈΠ±ΠΎ Π²Π΅ΡΡ ΡΡΠΎΠ»Π±Π΅Ρ ΠΌΠ°ΡΡΠΈΡΡ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π·Π°ΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΌ.
π‘ ΠΠ΄Π΅Ρ
ΠΠ°Π΄Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ:
- ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΡΠΎΠΊΠΈ/ΡΡΠΎΠ»Π±ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
arr
.
- ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π½ΡΠΆΠ½ΠΎ:
- ΠΠ°ΠΉΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ·
arr
Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ/ΡΡΠΎΠ»Π±ΡΠ°.
- ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΠΈ ΡΡΠΈΡ
ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠ².
π ΠΠ΅ΡΠ°Π»ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°
-
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²:
- Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²
pos_index
, Π³Π΄Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° x
ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π² arr
.
ΠΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΠΈΡΠ»Π° Π·Π° O(1)
.
-
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠΎΠΊ:
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ²:
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Π² ΠΈΡ
ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈΠ·
pos_index
.
- ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ.
-
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠΎΠ»Π±ΡΠΎΠ²:
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ°:
- ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ»Π±ΡΠ° ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΠΈΡ
Π² ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈΠ·
pos_index
.
- ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ.
-
ΠΡΠΎΠ³:
- ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ· ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΡΡΠΎΠΊΠ°ΠΌ ΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌ β ΡΡΠΎ ΠΎΡΠ²Π΅Ρ.
β± ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ°
-
ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ:
O(m * n)
- ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ pos_index:
O(m * n)
.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠΎΠΊ:
O(m * n)
.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠΎΠ»Π±ΡΠΎΠ²:
O(m * n)
.
-
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ:
O(m * n)
- ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π°
pos_index
: O(m * n)
.
- ΠΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ
O(1)
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
βοΈ ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄
impl Solution {
pub fn first_complete_index(arr: Vec<i32>, mat: Vec<Vec<i32>>) -> i32 {
let m = mat.len();
let n = mat[0].len();
let mut pos_index = vec![0; (m * n + 1) as usize];
// Map values in arr to their indices
for (i, &val) in arr.iter().enumerate() {
pos_index[val as usize] = i as i32;
}
let mut best = i32::MAX;
// Check rows
for row in &mat {
if let Some(max_index) = row.iter().map(|&val| pos_index[val as usize]).max() {
best = best.min(max_index);
}
}
// Check columns
for col in 0..n {
if let Some(max_index) = (0..m).map(|row| pos_index[mat[row][col] as usize]).max() {
best = best.min(max_index);
}
}
best
}
}