add initial data
This commit is contained in:
1 parent
048a82b101
commit
51d935d06b
66 files changed
+1329
No files matched your search
Generated
+7
@@ -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"
|
||||
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "leetcode"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user