diff --git a/rust-leetcode/README.md b/rust-leetcode/README.md index 90a73d5bb54e16096d87cf4b03f694752545fd23..f4bae8c8d4a35b888cd5e6a2d2b2c99d7da9fc1a 100644 --- a/rust-leetcode/README.md +++ b/rust-leetcode/README.md @@ -7,128 +7,75 @@ Leetcode Rust 实现 无注明,默认是LeetCode系列 -* [面试题 22 链表中倒数第k个节点](src/interview_22.rs) +## 树 -* [1351 统计有序矩阵中的负数](src/leetcode_1351.rs) +* [面试题 55 - I 二叉树的深度](src/interview_55_1.rs) +* [面试题 04.02 最小高度树](src/interview_04_02.rs) +* [938 二叉搜索树的范围和](src/leetcode_938.rs) +* [617 合并二叉树](src/leetcode_617.rs) +* [面试题 54 二叉搜索树的第k大节点](src/interview_54.rs) +* [面试题 32 - II. 从上到下打印二叉树 II](src/interview_32_2.rs) -* [面试题 02.02 返回倒数第 k 个节点值](src/interview_02_02.rs) +## 链表&栈&队列 -* [面试题 55 - I 二叉树的深度](src/interview_55_1.rs) +* [面试题 22 链表中倒数第k个节点](src/interview_22.rs) +* [面试题 06 从尾到头打印链表](src/interview_06.rs) +* [面试题 24 反转链表](src/interview_24.rs) +* [面试题 25 合并两个排序的链表](src/interview_25.rs) +* [876 链表的中间结点](src/leetcode_876.rs) +* [83 删除排序链表中的重复元素](src/leetcode_83.rs) +* [面试题 02.02 返回倒数第 k 个节点值](src/interview_02_02.rs) +* [面试题 03.04 化栈为队](src/interview_03_04.rs) +* [面试题 09 用两个栈实现队列](src/interview_09.rs) +* [20 有效的括号](src/leetcode_20.rs) +* [1021 删除最外层的括号](src/leetcode_1021.rs) +* [933 最近的请求次数](src/leetcode_933.rs) -* [面试题 04.02 最小高度树](src/interview_04_02.rs) +## 数组&矩阵 +* [1351 统计有序矩阵中的负数](src/leetcode_1351.rs) +* [1380 矩阵中的幸运数](src/leetcode_1380.rs) +* [1385 两个数组间的距离值](src/leetcode_1385.rs) +* [977 有序数组的平方](src/leetcode_977.rs) +* [561 数组拆分 I](src/leetcode_561.rs) +* [905 按奇偶排序数组](src/leetcode_905.rs) +* [1403 非递增顺序的最小子序列](src/leetcode_1403.rs) * [1281 整数的各位积和之差](src/leetcode_1281.rs) - * [面试题 58 - II 左旋转字符串](src/interview_58_2.rs) - * [1365 有多少小于当前数字的数字](src/leetcode_1365.rs) - * [1342 将数字变成 0 的操作次数](src/leetcode_1342.rs) - * [1313 解压缩编码列表](src/leetcode_1313.rs) - * [面试题 17 打印从1到最大的n位数](src/interview_17.rs) - * [面试题 05 替换空格](src/interview_05.rs) - * [1221 分割平衡字符串](src/leetcode_1221.rs) - -* [面试题 06 从尾到头打印链表](src/interview_06.rs) - -* [938 二叉搜索树的范围和](src/leetcode_938.rs) - -* [1021 删除最外层的括号](src/leetcode_1021.rs) - -* [面试题 24 反转链表](src/interview_24.rs) - * [1252 奇数值单元格的数目](src/leetcode_1252.rs) - * [1323 6 和 9 组成的最大数字](src/leetcode_1323.rs) - -* [617 合并二叉树](src/leetcode_617.rs) - * [461 汉明距离](src/leetcode_461.rs) - * [709 转换成小写字母](src/leetcode_709.rs) - * [1304 和为零的N个唯一整数](src/leetcode_1304.rs) - * [804 唯一摩尔斯密码词](src/leetcode_804.rs) - * [832 翻转图像](src/leetcode_832.rs) - -* [面试题 25 合并两个排序的链表](src/interview_25.rs) - * [1370 上升下降字符串](src/leetcode_1370.rs) - -* [面试题 03.04 化栈为队](src/interview_03_04.rs) - * [1051 高度检查器](src/leetcode_1051.rs) - * [728 自除数](src/leetcode_728.rs) - * [面试题 01.01 判定字符是否唯一](src/interview_01_01.rs) - -* [1385 两个数组间的距离值](src/leetcode_1385.rs) - -* [面试题 54 二叉搜索树的第k大节点](src/interview_54.rs) - -* [面试题 09 用两个栈实现队列](src/interview_09.rs) - * [面试题 16.07 最大数值](src/interview_16_07.rs) - -* [977 有序数组的平方](src/leetcode_977.rs) - -* [1380 矩阵中的幸运数](src/leetcode_1380.rs) - -* [933 最近的请求次数](src/leetcode_933.rs) - -* [561 数组拆分 I](src/leetcode_561.rs) - * [1374 生成每种字符都是奇数个的字符串](src/leetcode_1374.rs) - -* [1403 非递增顺序的最小子序列](src/leetcode_1403.rs) - * [557 反转字符串中的单词 III](src/leetcode_557.rs) - * [999 可以被一步捕获的棋子数](src/leetcode_999.rs) - * [292 Nim 游戏](src/leetcode_292.rs) - * [1160 拼写单词](src/leetcode_1160.rs) - * [1413 逐步求和得到正数的最小值](src/leetcode_1413.rs) - -* [面试题 32 - II. 从上到下打印二叉树 II](src/interview_32_2.rs) - * [944 删列造序](src/leetcode_944.rs) - * [9 回文数](src/leetcode_9.rs) - * [13 罗马数字转整数](src/leetcode_13.rs) - -* [876 链表的中间结点](src/leetcode_876.rs) - * [500 键盘行](src/leetcode_500.rs) - -* [14 长公共前缀](src/leetcode_14.rs) - -* [20 有效的括号](src/leetcode_20.rs) - +* [14 最长公共前缀](src/leetcode_14.rs) * [35 搜索插入位置](src/leetcode_35.rs) - -* [905 按奇偶排序数组](src/leetcode_905.rs) - * [1207 独一无二的出现次数](src/leetcode_1207.rs) - * [38 外观数列](src/leetcode_38.rs) - * [58 最后一个单词的长度](src/leetcode_58.rs) - * [665 非递减数列](src/leetcode_665.rs) - * [66 加一](src/leetcode_66.rs) - * [67 二进制求和](src/leetcode_67.rs) - -* [83 删除排序链表中的重复元素](src/leetcode_83.rs) \ No newline at end of file +* [475 供暖器](src/leetcode_475.rs) \ No newline at end of file diff --git a/rust-leetcode/src/leetcode_475.rs b/rust-leetcode/src/leetcode_475.rs new file mode 100644 index 0000000000000000000000000000000000000000..05ae08f3d382ab04473af48a386156d47f49d88a --- /dev/null +++ b/rust-leetcode/src/leetcode_475.rs @@ -0,0 +1,69 @@ +use std::cmp::{max, min}; + +use crate::pre_structs::Solution; + +///475. 供暖器 +impl Solution { + //8ms 2.3MB + pub fn find_radius(houses: Vec, heaters: Vec) -> i32 { + let mut heaters = heaters; + heaters.sort(); + let mut res = 0i32; + for h in houses.iter() { + match heaters.binary_search(h) { + Err(should_insert_index) => { + let left_dist = if should_insert_index > 0 { + h - heaters[should_insert_index - 1] + } else { + i32::max_value() + }; + let right_dist = if should_insert_index <= heaters.len() - 1 { + heaters[should_insert_index] - h + } else { + i32::max_value() + }; + res = max(res, min(left_dist, right_dist)); + } + _ => {} + } + } + res + } + + //双指针 4ms 2.4MB + pub fn find_radius2(houses: Vec, heaters: Vec) -> i32 { + let mut houses = houses; + let mut heaters = heaters; + houses.sort(); + heaters.sort(); + let mut r = 0; + let mut i = 0usize; + for &h in houses.iter() { + while i < heaters.len() && h > heaters[i] { + i += 1; + } + if i == 0 { + r = max(r, heaters[i] - h); + } else if i == heaters.len() { + return max(r, houses[houses.len() - 1] - heaters[heaters.len() - 1]); + } else { + r = max(r, min(heaters[i] - h, h - heaters[i - 1])); + } + } + r + } +} + +#[cfg(test)] +mod test { + use crate::pre_structs::Solution; + + #[test] + fn find_radius() { + let ret = Solution::find_radius([1, 2, 3, 4].to_vec(), [1, 4].to_vec()); + assert!(ret == 1); + + let ret = Solution::find_radius2([1, 2, 3, 4].to_vec(), [1, 4].to_vec()); + assert!(ret == 1); + } +} diff --git a/rust-leetcode/src/main.rs b/rust-leetcode/src/main.rs index 009f83fdaef39744b9338afc5304eaf609adf843..e55395ad6f6d812458cf2a4150ecf10011e1268b 100644 --- a/rust-leetcode/src/main.rs +++ b/rust-leetcode/src/main.rs @@ -44,6 +44,7 @@ pub mod leetcode_292; pub mod leetcode_35; pub mod leetcode_38; pub mod leetcode_461; +pub mod leetcode_475; pub mod leetcode_500; pub mod leetcode_557; pub mod leetcode_561;