g2101_2200.s2149_rearrange_array_elements_by_sign.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
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