add initial data

This commit is contained in:
timeshifter committed 2026-09-04 15:56:45 +02:00
1 parent 048a82b101
commit 51d935d06b
66 files changed
+1329

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "leetcode"
version = "0.1.0"
+6
View File
@@ -0,0 +1,6 @@
[package]
name = "leetcode"
version = "0.1.0"
edition = "2024"
[dependencies]
+88
View File
@@ -0,0 +1,88 @@
fn main() {
println!("Hello, world!");
}
pub fn three_sum(nums: Vec<i32>) -> Vec<Vec<i32>> {
let mut result = vec![];
if nums.len() < 3 {
return result;
}
let mut nums: Vec<_> = nums;
nums.sort_unstable();
for idx in 0..nums.len() - 1 {
let first = nums[idx];
if first > 0 {
// no more negative numbers left, so we are done
break;
}
if idx > 0 && first == nums[idx - 1] {
// we already scanned for this number
continue;
}
let mut left = idx + 1;
let mut right = nums.len() - 1;
while left < right {
let sum = first + nums[left] + nums[right];
if sum == 0 {
let entry = vec![first, nums[left], nums[right]];
result.push(entry);
// skip identical numbers that would lead to the same combinations
while nums[left + 1] == nums[left] && left < nums.len() - 2 {
left += 1;
}
while nums[right - 1] == nums[right] && right > 1 {
right -= 1;
}
}
if sum <= 0 {
left += 1;
} else {
right -= 1;
}
}
}
result
}
#[cfg(test)]
mod tests {
use crate::three_sum;
#[test]
fn test_1() {
let sums = three_sum(vec![-1, 0, 1, 2, -1, -4]);
assert_eq!(sums.len(), 2);
assert!(sums.contains(&vec![-1, -1, 2]));
assert!(sums.contains(&vec![-1, 0, 1]));
}
#[test]
fn test_2() {
let sums = three_sum(vec![0, 1, 1]);
assert_eq!(sums, Vec::<Vec<i32>>::new());
}
#[test]
fn test_3() {
let sums = three_sum(vec![0, 0, 0]);
assert_eq!(sums, vec![vec![0, 0, 0]]);
}
#[test]
fn test_4() {
let sums = three_sum(vec![
2, -3, 0, -2, -5, -5, -4, 1, 2, -2, 2, 0, 2, -4, 5, 5, -10,
]);
assert_eq!(sums.len(), 6);
}
}