Skip to content

Instantly share code, notes, and snippets.

@wperron
Created May 3, 2023 19:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wperron/a69b74e252057864494f4a4e7d35b48b to your computer and use it in GitHub Desktop.
Save wperron/a69b74e252057864494f4a4e7d35b48b to your computer and use it in GitHub Desktop.
Remove leading and trailing zeroes from a list of numbers
/// Given a non-empty array containing only non-negative integers, return the
/// list with trailing and leading zeroes removed.
///
/// Example:
///
/// ```
/// > removeZeroes([0, 0, 0, 3, 1, 4, 1, 5, 9, 0, 0, 0, 0])
/// > [3, 1, 4, 1, 5, 9]
///
/// > removeZeroes([0, 0, 0])
/// > []
///
/// > removeZeroes([8])
/// > [8]
/// ```
fn main() {
let mut v = vec![0, 0, 0, 3, 1, 4, 1, 5, 9, 0, 0, 0, 0];
println!("{:?}", remove_zeros(&mut v));
println!("{:?}", v);
}
fn remove_zeros(v: &mut Vec<usize>) {
if v.len() == 0 {
return;
}
let mut i = 0;
while i <= v.len() && v[0..i].iter().sum::<usize>() == 0 {
i += 1;
}
v.drain(..i - 1);
if v.len() == 0 {
return;
}
let mut j = v.len() - 1;
while v[j..].iter().sum::<usize>() == 0 {
j -= 1;
}
v.drain(j + 1..);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_remove_zeros() {
let mut v = vec![0, 0, 0, 3, 1, 4, 1, 5, 9, 0, 0, 0, 0];
remove_zeros(&mut v);
assert_eq!(vec![3, 1, 4, 1, 5, 9], v,);
let mut v = vec![0, 0, 0];
remove_zeros(&mut v);
assert_eq!(Vec::<usize>::new(), v);
let mut v = vec![8];
remove_zeros(&mut v);
assert_eq!(vec![8], v);
let mut v = vec![];
remove_zeros(&mut v);
assert_eq!(Vec::<usize>::new(), v);
let mut v = vec![0];
remove_zeros(&mut v);
assert_eq!(Vec::<usize>::new(), v);
let mut v = vec![1, 0, 0, 0];
remove_zeros(&mut v);
assert_eq!(vec![1], v);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment