All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g2101_2200.s2149_rearrange_array_elements_by_sign.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g2101_2200.s2149_rearrange_array_elements_by_sign;

// #Medium #Array #Two_Pointers #Simulation #2022_06_08_Time_10_ms_(34.66%)_Space_231.2_MB_(5.61%)

/**
 * 2149 - Rearrange Array Elements by Sign\.
 *
 * Medium
 *
 * You are given a **0-indexed** integer array `nums` of **even** length consisting of an **equal** number of positive and negative integers.
 *
 * You should **rearrange** the elements of `nums` such that the modified array follows the given conditions:
 *
 * 1.  Every **consecutive pair** of integers have **opposite signs**.
 * 2.  For all integers with the same sign, the **order** in which they were present in `nums` is **preserved**.
 * 3.  The rearranged array begins with a positive integer.
 *
 * Return _the modified array after rearranging the elements to satisfy the aforementioned conditions_.
 *
 * **Example 1:**
 *
 * **Input:** nums = [3,1,-2,-5,2,-4]
 *
 * **Output:** [3,-2,1,-5,2,-4]
 *
 * **Explanation:** The positive integers in nums are [3,1,2]. 
 *
 * The negative integers are [-2,-5,-4]. 
 *
 * The only possible way to rearrange them such that they satisfy all conditions is [3,-2,1,-5,2,-4]. 
 *
 * Other ways such as [1,-2,2,-5,3,-4], [3,1,2,-2,-5,-4], [-2,3,-5,1,-4,2] are incorrect because they do not satisfy one or more conditions.
 *
 * **Example 2:**
 *
 * **Input:** nums = [-1,1]
 *
 * **Output:** [1,-1]
 *
 * **Explanation:** 1 is the only positive integer and -1 the only negative integer in nums. 
 *
 * So nums is rearranged to [1,-1].
 *
 * **Constraints:**
 *
 * *   2 <= nums.length <= 2 * 105
 * *   `nums.length` is **even**
 * *   1 <= |nums[i]| <= 105
 * *   `nums` consists of **equal** number of positive and negative integers.
**/
public class Solution {
    public int[] rearrangeArray(int[] nums) {
        int[] negatives = new int[nums.length / 2];
        int[] positives = new int[nums.length / 2];
        int[] result = new int[nums.length];
        int pPtr = 0;
        int nPtr = 0;
        int rPtr = 0;
        for (int num : nums) {
            if (num > 0) {
                positives[pPtr++] = num;
            } else {
                negatives[nPtr++] = num;
            }
        }
        pPtr = 0;
        nPtr = 0;
        while (pPtr < positives.length && nPtr < negatives.length) {
            result[rPtr++] = positives[pPtr++];
            result[rPtr++] = negatives[nPtr++];
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy