diff --git a/README.MD b/README.MD index 6331686..86f4579 100644 --- a/README.MD +++ b/README.MD @@ -1,9 +1,3 @@ -# 路漫漫其修远兮,吾将上下而求索 +## 路漫漫其修远兮,吾将上下而求索 -# 工欲善其事,必先利其器 - -# 刷题中... - -# 分类 - -## 位运算 +## 工欲善其事,必先利其器 diff --git a/rust/src/implements/mod.rs b/rust/src/implements/mod.rs index 31bd1c8..c903744 100644 --- a/rust/src/implements/mod.rs +++ b/rust/src/implements/mod.rs @@ -68,3 +68,5 @@ mod q0704; mod q0035; mod q0152; mod q0977; +mod q0283; +mod q0344; diff --git a/rust/src/implements/q0283.rs b/rust/src/implements/q0283.rs new file mode 100644 index 0000000..27b1b6e --- /dev/null +++ b/rust/src/implements/q0283.rs @@ -0,0 +1,46 @@ +use crate::Solution; + + +impl Solution { + /// 283.移动零 + /// + /// [原题链接](https://leetcode-cn.com/problems/move-zeroes/) + /// + /// 2021-07-20 22:21:24 + /// + /// 给定一个数组 `nums`,编写一个函数将所有 `0` 移动到数组的末尾,同时保持非零元素的相对顺序。 + /// + /// + 示例: + /// - 输入: `[0,1,0,3,12]` + /// - 输出: `[1,3,12,0,0]` + /// + 说明: + /// - 必须在原数组上操作,不能拷贝额外的数组。 + /// - 尽量减少操作次数。 + /// + /// Related Topics 数组 双指针 + /// + /// 👍 1131 👎 0 + pub fn move_zeroes(nums: &mut Vec) { + let (mut l, mut r) = (0usize, 0usize); + while r < nums.len() { + if nums[r] != 0 { + nums.swap(l, r); + l += 1; + } + r += 1; + } + } +} + + +#[cfg(test)] +mod test { + use crate::Solution; + + #[test] + fn test_q0283() { + let mut nums = vec![0, 1, 0, 3, 12]; + Solution::move_zeroes(&mut nums); + assert_eq!(nums, vec![1, 3, 12, 0, 0]); + } +} diff --git a/rust/src/implements/q0344.rs b/rust/src/implements/q0344.rs new file mode 100644 index 0000000..df2357a --- /dev/null +++ b/rust/src/implements/q0344.rs @@ -0,0 +1,50 @@ +use crate::Solution; + + +impl Solution { + /// 344.反转字符串 + /// + /// [原题链接](https://leetcode-cn.com/problems/reverse-string/) + /// + /// 2021-07-20 22:32:53 + /// + /// 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 `char[]` 的形式给出。 + /// + /// 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 `O(1)` 的额外空间解决这一问题。 + /// + /// 你可以假设数组中的所有字符都是 `ASCII` 码表中的可打印字符。 + /// + /// + 示例 1: + /// - 输入:`["h","e","l","l","o"]` + /// - 输出:`["o","l","l","e","h"]` + /// + 示例 2: + /// - 输入:`["H","a","n","n","a","h"]` + /// - 输出:`["h","a","n","n","a","H"]` + /// + /// Related Topics 递归 双指针 字符串 + /// + /// 👍 425 👎 0 + pub fn reverse_string(s: &mut Vec) { + let n = s.len(); + let mut idx = 0; + for i in 0..n / 2 { + idx = n - i - 1; + s[i] = (s[i] as u8 ^ s[idx] as u8) as char; + s[idx] = (s[i] as u8 ^ s[idx] as u8) as char; + s[i] = (s[i] as u8 ^ s[idx] as u8) as char; + } + } +} + + +#[cfg(test)] +mod test { + use crate::Solution; + + #[test] + fn test_q0344() { + let mut s = vec!['h', 'e', 'l', 'l', 'o']; + Solution::reverse_string(&mut s); + assert_eq!(s, vec!['o', 'l', 'l', 'e', 'h']); + } +} diff --git a/rust/src/leet_code.rs b/rust/src/leet_code.rs index 9daaa60..f1a13c9 100644 --- a/rust/src/leet_code.rs +++ b/rust/src/leet_code.rs @@ -1037,20 +1037,6 @@ impl Solution { } } - /// 344.反转字符串 - /// - /// [原题链接](https://leetcode-cn.com/problems/reverse-string/) - pub fn reverse_string(s: &mut Vec) { - let n = s.len(); - let mut idx = 0; - for i in 0..n / 2 { - idx = n - i - 1; - s[i] = (s[i] as u8 ^ s[idx] as u8) as char; - s[idx] = (s[i] as u8 ^ s[idx] as u8) as char; - s[i] = (s[i] as u8 ^ s[idx] as u8) as char; - } - } - /// 125.验证回文串 /// /// [原题链接](https://leetcode-cn.com/problems/valid-palindrome/) @@ -2484,20 +2470,6 @@ impl Solution { (stones.len() - count) as i32 } - /// 283.移动零 - /// - /// [原题链接](https://leetcode-cn.com/problems/move-zeroes/) - pub fn move_zeroes(nums: &mut Vec) { - let (mut left, mut right) = (0usize, 0usize); - while right < nums.len() { - if nums[right] != 0 { - nums.swap(left, right); - left += 1; - } - right += 1; - } - } - /// 4.寻找两个正序数组的中位数 /// /// [原题链接](https://leetcode-cn.com/problems/median-of-two-sorted-arrays/) @@ -4318,14 +4290,6 @@ mod tests { assert_eq!(i, 5); } - #[test] - fn test_move_zeroes() { - let mut nums = vec![0, 1, 0, 3, 12]; - Solution::move_zeroes(&mut nums); - //println!("{:?}", nums); - assert_eq!(nums, vec![1, 3, 12, 0, 0]); - } - #[test] fn test_find_duplicate() { let nums = vec![8, 7, 1, 10, 17, 15, 18, 11, 16, 9, 19, 12, 5, 14, 3, 4, 2, 13, 18, 18];