力扣https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
参考代码和注释
fn main() {
let mut v : Vec<i32> = vec![0,1,1,3,3,4,5,6,6,6];
//借用所有权
let new_length = remove_duplicate(&mut v);
// 打印数组
println!("{:?}", v);
println!("{new_length}");
//可以把usize转换为i32
let len = new_length as i32;
println!("{len}");
//切片没有所有权,只能通过&借用
println!("{:?}", &v[0..new_length])
}
// 有序的数组
//usize和isize主要作为数组和集合的索引类型使用
//借用所有权,方法结束后返还所有权
fn remove_duplicate(vec : &mut Vec<i32>) -> usize{
let mut slow = 0;
for fast in 1..vec.len() {
if vec[slow] != vec[fast]{
slow +=1;
vec[slow] = vec[fast];
}
}
return slow+1;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_move() {
let v : Vec<i32> = vec![0,1,1,3,3,4,5,6,6,6];
remove_duplicate(&v);
// 打印数组
println!("{:?}", v);
// 判断两个数组相等
assert_eq!(v, [0,1,3,4,5,6]);
}
}
参考: GitHub - inrust/Rust-Programming-in-Action: 《Rust编程:入门、实战与进阶》源码