carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode922:按奇偶排序数组 II(sort-array-by-parity-ii) #165

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给定一个非负整数数组 nums,  nums 中一半整数是 奇数 ,一半整数是 偶数 。

对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。

你可以返回 任何满足上述条件的数组作为答案 。

 

示例 1:

输入:nums = [4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

示例 2:

输入:nums = [2,3] 输出:[2,3]  

提示:

2 <= nums.length <= 2 * 104 nums.length 是偶数 nums 中一半是偶数 0 <= nums[i] <= 1000

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/sort-array-by-parity-ii

carloscn commented 1 year ago

问题分析

必须知道哪些数是奇数哪些数是偶数,区分开之后,再去制作一个ret_array。

pub fn sort_array_by_parity_ii(nums: Vec<i32>) -> Vec<i32>
{
    let mut ret_vec:Vec<i32> = vec![];
    let odd_vec:Vec<i32> = nums.iter()
                               .filter(|x| *x & 1 == 1)
                               .map(|x| *x)
                               .collect();
    let even_vec:Vec<i32> = nums.iter()
                                .filter(|x| *x & 1 == 0)
                                .map(|x| *x)
                                .collect();

    if odd_vec.len() != even_vec.len() {
        return ret_vec;
    }

    for i in 0..odd_vec.len() {
        ret_vec.push(odd_vec[i]);
        ret_vec.push(even_vec[i]);
    }

    return ret_vec;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/551632 https://github.com/carloscn/structstudy/commit/2c4b30384b9e2b4bf57e6f27c3dc0f4cd713c383