Problem Statement:
Given an unsorted array with combination of positive and negative integers.
you need to re arrange them in one positive and one negative format.
Any extra +ve or -ve numbers should come at the end.
Solution:
This problem can be solved in number of different ways.
In this article we shall discuss a easy approach, below are the steps:
1. Keep the -ve elements in odd index
2. Keep the +ve elements in even index.
3. We get the solution
Solution in C++
#include <vector> #include <algorithm> //visit www.ProDeveloperTutorial.com for 450+ solved questions #include <iostream> #include <queue> using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void toggle_elements(int arr[], int n) { int negative = 0; int positive = 1; int i = 0; // keep negative elements first on odd index while( i < n ) { if(arr[i] < 0 && negative <n) { swap(&arr[i], & arr[negative]); negative += 2; } i++; } i=0; // keep positive elements on even index while(i<n) { if(arr[i] >= 0 && positive <n) { swap(&arr[i], & arr[positive]); positive += 2; } i++; } //print the array for(int i=0; i<n; i++) { cout<<arr[i]<<" "; } cout<<endl; } int main() { int arr[] = {-5, 3, -1, -4, 5, -6, -2, 8, 9, -1, -4}; toggle_elements(arr, sizeof(arr)/sizeof(arr[0])); }
Output:
-5 3 -1 5 -2 9 -4 8 -6 -1 -4