This approach involves creating two separate lists to store positive and negative numbers. After separating, we iterate through both lists simultaneously, placing elements alternatively from each into a new result list. This ensures that conditions for alternating signs and preserving order are met.
Time Complexity: O(n); Space Complexity: O(n).
1def rearrange_array(nums):
2 pos, neg = [], []
3 for num in nums:
4 if num > 0:
5 pos.append(num)
6 else:
7 neg.append(num)
8 result = []
9 for p, n in zip(pos, neg):
10 result.extend([p, n])
11 return result
12
13nums = [3, 1, -2, -5, 2, -4]
14print(rearrange_array(nums))
This Python solution uses two lists to separate positive and negative numbers, then interleaves them in the result list.
This approach attempts to rearrange the array in-place with the help of two pointers: one for the next positive element and one for the next negative. Starting with the assumption that the first element should be positive, iterate over the array and swap elements to their correct positions as needed.
Time Complexity: O(n); Space Complexity: O(1).
1function rearrangeArray(nums) {
2 let pos = 0, neg = 1;
3 while (pos < nums.length && neg < nums.length) {
4 if (nums[pos] > 0) {
5 pos += 2;
6 } else if (nums[neg] < 0) {
7 neg += 2;
8 } else {
9 [nums[pos], nums[neg]] = [nums[neg], nums[pos]]; // Swap
10 }
11 }
12 return nums;
13}
14
15const nums = [3, 1, -2, -5, 2, -4];
16console.log(rearrangeArray(nums));
This JavaScript code performs direct swaps in the input array to achieve the rearrangement with alternating order.