Сообщение Re: Leetcode - 3Sum. Не пойму, чего хотят от 06.05.2022 8:24
Изменено 06.05.2022 8:35 ArtDenis
Re: Leetcode - 3Sum. Не пойму, чего хотят
Здравствуйте, Marty, Вы писали:
M>https://leetcode.com/problems/3sum/
Решил глянуть что вообще такое leetcode на этом примере
Мой вариант на расте. PS: Возможно что-то неправильно понял в задании + не проверял
M>https://leetcode.com/problems/3sum/
Решил глянуть что вообще такое leetcode на этом примере
Мой вариант на расте. PS: Возможно что-то неправильно понял в задании + не проверял
use std::collections::*;
use itertools::*;
pub fn three_sum(nums: Vec<i32>) -> Vec<Vec<i32>> {
let mut lookup = HashMap::new(); // value -> index
let mut lookup_minus_sum = |sum| -> Option<(i32, usize, i32, usize)> {
lookup.clear();
for (idx, value) in nums.iter().enumerate() {
let sum_minus = sum - value;
if let Some(i) = lookup.get(&sum_minus) {
return Some((*value, idx, sum_minus, *i));
} else {
lookup.insert(*value, idx);
}
}
None
};
nums.iter().enumerate()
.filter_map(|(i, v)| lookup_minus_sum(-v).and_then( // находим пару в nums, такую что их сумма равна -v:
|(v2, j, v3, k)| Some((i, *v, j, v2, k, v3))
))
.filter(|(i, _, j, _, k, _)| i != k && j!= k && k != i) // отсеиваем по индексам i != k && j!= k && k != i
.map(|(_, v1, _, v2, _, v3)| (v1, v2, v3)) // формируем тройки
.unique() // оставляем только уникальные тройки
.map(|(v1, v2, v3)| vec![v1, v2, v3]) // как требует задание, тройка должна быть вектором
.collect() // получаем конечный вектор векторов
}Re: Leetcode - 3Sum. Не пойму, чего хотят
Здравствуйте, Marty, Вы писали:
M>https://leetcode.com/problems/3sum/
Решил глянуть что вообще такое leetcode на этом примере
Мой вариант на расте. PS: Возможно что-то неправильно понял в задании + не проверял
M>https://leetcode.com/problems/3sum/
Решил глянуть что вообще такое leetcode на этом примере
Мой вариант на расте. PS: Возможно что-то неправильно понял в задании + не проверял
use std::collections::*;
use itertools::*;
pub fn three_sum(nums: Vec<i32>) -> Vec<Vec<i32>> {
let mut lookup = HashMap::new(); // value -> index
let mut lookup_minus_sum = |sum| -> Option<(i32, usize, i32, usize)> {
lookup.clear();
for (idx, value) in nums.iter().enumerate() {
let sum_minus = sum - value;
if let Some(i) = lookup.get(&sum_minus) {
return Some((*value, idx, sum_minus, *i));
} else {
lookup.insert(*value, idx);
}
}
None
};
nums.iter().enumerate()
.filter_map(|(i, v)| lookup_minus_sum(-v).and_then( // находим пару в nums, такую что их сумма равна -v:
|(v2, j, v3, k)|
Some((i, *v, j, v2, k, v3))
))
.filter(|(i, _, j, _, k, _)| // отсеиваем по индексам i != k && j!= k && k != i
i != k && j != k && k != i
)
.map(|(_, v1, _, v2, _, v3)| // формируем тройки
(v1, v2, v3)
)
.unique() // оставляем только уникальные тройки
.map(|(v1, v2, v3)| // как требует задание, тройка должна быть вектором
vec![v1, v2, v3]
)
.collect() // получаем конечный вектор векторов
}