carloscn / structstudy

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

leetcode2206: Divide Array Into Equal Pairs #358

Open carloscn opened 1 year ago

carloscn commented 1 year ago

Description

You are given an integer array nums consisting of 2 * n integers.

You need to divide nums into n pairs such that:

Each element belongs to exactly one pair. The elements present in a pair are equal. Return true if nums can be divided into n pairs, otherwise return false.

Example 1:

Input: nums = [3,2,3,2,2,2] Output: true Explanation: There are 6 elements in nums, so they should be divided into 6 / 2 = 3 pairs. If nums is divided into the pairs (2, 2), (3, 3), and (2, 2), it will satisfy all the conditions.

Example 2:

Input: nums = [1,2,3,4] Output: false Explanation: There is no way to divide nums into 4 / 2 = 2 pairs such that the pairs satisfy every condition.

Constraints:

nums.length == 2 * n 1 <= n <= 500 1 <= nums[i] <= 500

carloscn commented 1 year ago

Analysis

pub fn divide_array(nums: Vec<i32>) -> bool
{
    if nums.len() < 1 {
        return false;
    }

    let mut out_buffer:Vec<i32> = vec![];
    let mut in_buffer:Vec<i32> = nums.clone();

    in_buffer.sort();

    for e in in_buffer {
        if out_buffer.is_empty() {
            out_buffer.push(e);
            continue;
        }

        if out_buffer[out_buffer.len() - 1] == e {
            out_buffer.pop();
        }
    }

    return out_buffer.is_empty();
}
carloscn commented 1 year ago

Code

https://review.gerrithub.io/c/carloscn/structstudy/+/1169818 https://github.com/carloscn/structstudy/commit/75034500941fab10bb232a6702cafe60f30c3e37