总结
VecDeque
Vec reverse
as 类型转换
usize类型 -1 不会小于0,永远>=0
双指针合并
vec 索引类型必须强制转换成usize
1、https://leetcode.cn/problems/remove-element/submissions/
impl Solution {
pub fn remove_element(nums: &mut Vec<i32>, val: i32) -> i32 {
let total = nums.len() as usize;
let mut head :usize = 0;
let mut tail :usize = 0;
while tail < total {
if nums[tail] == val {
tail +=1;
} else {
nums[head] = nums[tail];
head +=1;
tail +=1;
}
}
head as i32
}
}
2、https://leetcode.cn/problems/plus-one/submissions/
use std::collections::VecDeque;
impl Solution {
pub fn plus_one(digits: Vec<i32>) -> Vec<i32> {
let total = digits.len() as usize;
let mut result:Vec<i32> = Vec::with_capacity(total+1);
let mut idx = total - 1 ;
let mut tmp:i32 = 1;
while idx >= 0 {
tmp += digits[idx];
result.push(tmp%10);
tmp = tmp/10;
if idx == 0 {
break;
}
idx -=1;
}
if tmp > 0 {
result.push(tmp);
}
result.reverse();
result
}
pub fn plus_one_v1(digits: Vec<i32>) -> Vec<i32> {
let total = digits.len() as usize;
let mut result = VecDeque::with_capacity(total+1);
let mut idx = total - 1 ;
let mut tmp = 1;
while idx >= 0 {
tmp += digits[idx];
result.push_front(tmp%10);
tmp = tmp/10;
if idx == 0 {
break;
}
idx -=1;
}
if tmp > 0 {
result.push_front(tmp);
}
Vec::from(result)
}
}
3、https://leetcode.cn/problems/sqrtx/
impl Solution {
pub fn my_sqrt(x: i32) -> i32 {
let tmp = x as u64;
let mut left = 0 as u64;
let mut right = x as u64;
let mut mid:u64;
let mut result:u64 = 0 ;
while left <= right {
mid = ((right-left)>>1) + left;
if mid*mid <= tmp { // mid 从左边向右逼近最终结果
left = mid + 1;
result = mid;
} else {
right = mid - 1;
}
}
result as i32
}
}
4、https://leetcode.cn/problems/merge-sorted-array/submissions/
impl Solution {
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
let mut idx1 = m-1;
let mut idx2 = n-1;
let mut idx_result = (m + n - 1) as usize;
while idx1 >= 0 && idx2 >=0 {
if nums1[idx1 as usize] <= nums2[idx2 as usize] {
nums1[idx_result] = nums2[idx2 as usize];
idx2 -=1;
idx_result -=1;
} else {
nums1[idx_result] = nums1[idx1 as usize];
idx1 -=1;
idx_result -=1;
}
}
// while idx1 >=0 {
// nums1[idx_result] = nums1[idx1 as usize];
// idx1 -=1;
// idx_result -=1;
// }
while idx2 >=0 {
nums1[idx_result] = nums2[idx2 as usize];
idx2 -=1;
idx_result -=1;
}
}
pub fn merge_v1(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
let mut idx1:usize = 0;
let mut idx2:usize = 0;
let musize = m as usize;
let nusize = n as usize;
let mut result = Vec::with_capacity(musize+nusize);
while idx1 < musize && idx2 < nusize {
if nums1[idx1] <= nums2[idx2] {
result.push(nums1[idx1]);
idx1+=1;
} else {
result.push(nums2[idx2]);
idx2+=1;
}
}
while idx1 < musize {
result.push(nums1[idx1]);
idx1+=1;
}
while idx2 < nusize {
result.push(nums2[idx2]);
idx2+=1;
}
idx1 = 0;
for num in result {
nums1[idx1] = num;
idx1+=1;
}
}
}







网友评论