20231227 Finished
This commit is contained in:
parent
76ac219cfc
commit
602667bfee
|
@ -7,5 +7,6 @@ mod s0003_longest_substring_without_repeating_characters;
|
||||||
mod s0162_find_peak_element;
|
mod s0162_find_peak_element;
|
||||||
mod s2828_check_if_a_string_is_an_acronym_of_words;
|
mod s2828_check_if_a_string_is_an_acronym_of_words;
|
||||||
mod s0052_n_queens_ii;
|
mod s0052_n_queens_ii;
|
||||||
|
mod s0912_sort_an_array;
|
||||||
mod s1276_number_of_burgers_with_no_waste_of_ingredients;
|
mod s1276_number_of_burgers_with_no_waste_of_ingredients;
|
||||||
mod s0006_zigzag_conversion;
|
mod s0006_zigzag_conversion;
|
||||||
|
|
95
src/solution/s0912_sort_an_array.rs
Normal file
95
src/solution/s0912_sort_an_array.rs
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
/**
|
||||||
|
* [912] Sort an Array
|
||||||
|
*
|
||||||
|
* Given an array of integers nums, sort the array in ascending order and return it.
|
||||||
|
* You must solve the problem without using any built-in functions in O(nlog(n)) time complexity and with the smallest space complexity possible.
|
||||||
|
*
|
||||||
|
* <strong class="example">Example 1:
|
||||||
|
*
|
||||||
|
* Input: nums = [5,2,3,1]
|
||||||
|
* Output: [1,2,3,5]
|
||||||
|
* Explanation: After sorting the array, the positions of some numbers are not changed (for example, 2 and 3), while the positions of other numbers are changed (for example, 1 and 5).
|
||||||
|
*
|
||||||
|
* <strong class="example">Example 2:
|
||||||
|
*
|
||||||
|
* Input: nums = [5,1,1,2,0,0]
|
||||||
|
* Output: [0,0,1,1,2,5]
|
||||||
|
* Explanation: Note that the values of nums are not necessairly unique.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Constraints:
|
||||||
|
*
|
||||||
|
* 1 <= nums.length <= 5 * 10^4
|
||||||
|
* -5 * 10^4 <= nums[i] <= 5 * 10^4
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
pub struct Solution {}
|
||||||
|
|
||||||
|
// problem: https://leetcode.cn/problems/sort-an-array/
|
||||||
|
// discuss: https://leetcode.cn/problems/sort-an-array/discuss/?currentPage=1&orderBy=most_votes&query=
|
||||||
|
|
||||||
|
// submission codes start here
|
||||||
|
|
||||||
|
impl Solution {
|
||||||
|
pub fn sort_array(nums: Vec<i32>) -> Vec<i32> {
|
||||||
|
let mut nums = nums;
|
||||||
|
let mut temp = Vec::with_capacity(nums.len());
|
||||||
|
temp.resize(nums.len(), 0);
|
||||||
|
let (left, right) = (0, nums.len() - 1);
|
||||||
|
|
||||||
|
Solution::merge_sort(&mut nums, &mut temp, left, right);
|
||||||
|
nums
|
||||||
|
}
|
||||||
|
|
||||||
|
fn merge_sort(nums: &mut Vec<i32>, temp: &mut Vec<i32>, left: usize, right: usize) {
|
||||||
|
if left >= right {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mid = (left + right) / 2;
|
||||||
|
Solution::merge_sort(nums, temp, left, mid);
|
||||||
|
Solution::merge_sort(nums, temp, mid + 1, right);
|
||||||
|
|
||||||
|
let (mut l, mut r, mut pos) = (left, mid + 1, left);
|
||||||
|
|
||||||
|
while l <= mid && r <= right {
|
||||||
|
if nums[l] <= nums[r] {
|
||||||
|
temp[pos] = nums[l];
|
||||||
|
l += 1;
|
||||||
|
} else {
|
||||||
|
temp[pos] = nums[r];
|
||||||
|
r += 1;
|
||||||
|
}
|
||||||
|
pos += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while l <= mid {
|
||||||
|
temp[pos] = nums[l];
|
||||||
|
pos += 1;
|
||||||
|
l += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while r <= right {
|
||||||
|
temp[pos] = nums[r];
|
||||||
|
pos += 1;
|
||||||
|
r += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in left..=right {
|
||||||
|
nums[i] = temp[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// submission codes end
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_912() {
|
||||||
|
assert_eq!(vec![1, 2, 3, 5], Solution::sort_array(vec![5, 2, 3, 1]));
|
||||||
|
assert_eq!(vec![0, 0, 1, 1, 2, 5], Solution::sort_array(vec![5, 1, 1, 2, 0, 0]));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user