Merge branch 'master' of git.rrricardo.top:jackfiled/leetcode

This commit is contained in:
jackfiled 2024-05-16 10:29:38 +08:00
commit 098e5ca766
5 changed files with 154 additions and 2 deletions

View File

@ -130,4 +130,7 @@ mod p49_group_anagrams;
mod p202_happy_number; mod p202_happy_number;
mod p219_contains_duplicate_ii; mod p219_contains_duplicate_ii;
mod p128_longest_consecutive_sequence; mod p128_longest_consecutive_sequence;
mod p228_summary_ranges;
mod p56_merge_intervals;
mod p57_insert_interval;
mod p452_minimum_number_of_arrows_to_burst_balloons; mod p452_minimum_number_of_arrows_to_burst_balloons;

View File

@ -4,7 +4,7 @@
pub struct Solution {} pub struct Solution {}
// submission codes start here // submission codes start here
use std::{collections::HashSet, ops::Add}; use std::collections::HashSet;
impl Solution { impl Solution {
pub fn is_happy(n: i32) -> bool { pub fn is_happy(n: i32) -> bool {
@ -13,7 +13,6 @@ impl Solution {
let mut n = Solution::calculate_square(n); let mut n = Solution::calculate_square(n);
while n != 1 { while n != 1 {
dbg!(n);
if s.contains(&n) { if s.contains(&n) {
return false; return false;
} }

View File

@ -0,0 +1,54 @@
/**
* [228] Summary Ranges
*/
pub struct Solution {}
// submission codes start here
impl Solution {
pub fn summary_ranges(nums: Vec<i32>) -> Vec<String> {
let mut result = vec![];
if nums.len() == 0 {
return result;
}
let mut begin = nums[0];
let mut end = nums[0];
for i in 1..nums.len() {
if nums[i] == end + 1 {
end += 1;
} else {
result.push(if begin == end {
format!("{}", begin)
} else {
format!("{}->{}", begin, end)
});
begin = nums[i];
end = nums[i];
}
}
result.push(if begin == end {
format!("{}", begin)
} else {
format!("{}->{}", begin, end)
});
result
}
}
// submission codes end
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_228() {
}
}

View File

@ -0,0 +1,47 @@
/**
* [56] Merge Intervals
*/
pub struct Solution {}
// submission codes start here
impl Solution {
pub fn merge(intervals: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut intervals: Vec<(i32, i32)> = intervals.iter().map(|p| (p[0], p[1])).collect();
intervals.sort_unstable();
let mut result: Vec<(i32, i32)> = vec![intervals[0]];
let mut last = 0;
for i in 1..intervals.len() {
let (begin, end) = intervals[i];
let (last_begin, last_end) = result[last];
if begin <= last_end {
result[last].0 = result[last].0.min(begin);
result[last].1 = result[last].1.max(end);
} else {
result.push(intervals[i]);
last += 1;
}
}
result.iter().map(|p| vec![p.0, p.1]).collect()
}
}
// submission codes end
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_56() {
assert_eq!(
vec![vec![1, 6], vec![8, 10], vec![15, 18]],
Solution::merge(vec![vec![1, 3], vec![2, 6], vec![8, 10], vec![15, 18]])
)
}
}

View File

@ -0,0 +1,49 @@
/**
* [57] Insert Interval
*/
pub struct Solution {}
// submission codes start here
impl Solution {
pub fn insert(intervals: Vec<Vec<i32>>, new_interval: Vec<i32>) -> Vec<Vec<i32>> {
let (mut left, mut right) = (new_interval[0], new_interval[1]);
let mut result = vec![];
let mut placed = false;
for interval in intervals {
if interval[1] < left {
result.push(interval);
} else if interval[0] > right {
if !placed {
result.push(vec![left, right]);
placed = true;
}
result.push(interval);
} else {
left = left.min(interval[0]);
right = right.max(interval[1]);
}
}
if !placed {
result.push(vec![left, right]);
}
result
}
}
// submission codes end
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_57() {
}
}