OneCompiler

ArrangePositiveAndNegative.cpp

127

#include <iostream>
#include <vector>

std::vector<int> ArrangePositiveAndNegative(const std::vector<int>& arr) {
std::vector<int> positiveNumbers, negativeNumbers;

for (int num : arr) {
    if (num > 0) {
        positiveNumbers.push_back(num);
    } else if (num < 0) {
        negativeNumbers.push_back(num);
    }
}

std::vector<int> arrangedArray;
int posIndex = 0, negIndex = 0;
bool positiveStep = true;

while (posIndex < positiveNumbers.size() || negIndex < negativeNumbers.size()) {
    if (positiveStep && posIndex < positiveNumbers.size()) {
        arrangedArray.push_back(positiveNumbers[posIndex++]);
    } else if (!positiveStep && negIndex < negativeNumbers.size()) {
        arrangedArray.push_back(negativeNumbers[negIndex++]);
    }
    positiveStep = !positiveStep;
}

return arrangedArray;

}

int main() {
std::cout << "Enter the size of the array: ";
int arraySize;
std::cin >> arraySize;
std::vector<int> array(arraySize);

for (int i = 0; i < arraySize; i++) {
    std::cout << "Enter element at index " << i << ": ";
    std::cin >> array[i];
}

std::cout << "Original Array: ";
for (int num : array) {
    std::cout << num << " ";
}
std::cout << std::endl;

std::vector<int> resultArray = ArrangePositiveAndNegative(array);

std::cout << "Arranged Array: ";
for (int num : resultArray) {
    std::cout << num << " ";
}
std::cout << std::endl;

return 0;

}

/* Possible Testcases

Testcase-1:

Input:
Size of the array: 5
Elements: 4 7 1 9 2

Output:
Original Array: 4 7 1 9 2
Arranged Array: 4 7 1 9 2

Testcase-2:

Input:
Size of the array: 6
Elements: -3 -7 -2 -5 -8 -1

Output:
Original Array: -3 -7 -2 -5 -8 -1
Arranged Array: -3 -7 -2 -5 -8 -1

Testcase-3:

Input:
Size of the array: 8
Elements: 4 -7 1 0 -3 6 -5 2

Output:
Original Array: 4 -7 1 0 -3 6 -5 2
Arranged Array: 4 -7 1 -3 6 -5 0 2
*/

/*Complexity:
Time Complexity: O(n) in worst case.
Space Complexity: This approach takes O(n) auxilary space , as we created 2 arrays positives and negatives.
*/