DEV Community

Cover image for Separate -ives and +ives maintaining their order
Aastha Talwaria
Aastha Talwaria

Posted on • Edited on

2 2

Separate -ives and +ives maintaining their order

Move all negative numbers to the beginning and positives to end, maintaining their order

An array contains both positive and negative numbers in random order. Rearrange the array elements so that all negative numbers appear before all positive numbers and the order of their occurrence in the given array should be maintained(order of negatives among negatives and positives among positives).

Input: [3, 5, -9, -8, 1 , 2, -10, -11, 15, 20, -20, 22]
Output: [-9, -8, -10, -11, -20, 3, 5, 1, 2, 15, 20, 22]
Enter fullscreen mode Exit fullscreen mode

NOTE: Order of elements is important here.

My Approach(without using extra space):

  • The idea is to solve the problem by dividing the array into four parts at each step when we want to shift the elements while iterating the array ( shifting condition will be arr[index]<0).
  • Steps:
    • iterate through the list
    • At every step, when a negative number encountered, slice the array in four parts say
      • first part: the part with the negatives.
      • the mid part: which we have to shift after the encountered negative number
      • the -ive number.
      • the last part, which is not iterated.

Alt Text

CODE:

let a = [3, 5, -9, -8, 1 , 2, -10, -11, 15, 20, -20, 22];
var nIndex = 0;
for(var index = 0; index    < a.length ; index++){
    if(a[index]<0){
        //negatives array
        let negativesArray= a.slice(0, nIndex);
        let midArray = a.slice(nIndex, index);
        let neg_num = a[index];
        let endArray = a.slice(index+1);
        a= [...negativesArray, neg_num,...midArray,...endArray];
        nIndex++;
    }
}
console.log(a) //output: [-9, -8, -10, -11, -20, 3, 5, 1, 2, 15, 20, 22]
Enter fullscreen mode Exit fullscreen mode

Let's discuss your approach in the discussion box or you can hit me up at aastha.talwaria29@gmail.com.

Thanks for reading.

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (2)

Collapse
 
thephydaux profile image
Chris Kent

Just typed on my phone so I haven't checked it works, but could you do something like this?

let a = [3, 5, -9, -8, 1 , 2, -10, -11, 15, 20, -20, 22];
const neg = [];
const pos = [];
for(let i=0; i<a.length; i++) {
   if(a[i] < 0) {
      neg.push(a[i]);
   } else {
      pos.push(a[i]);
   }
}
a = [...neg, ...pos];
Enter fullscreen mode Exit fullscreen mode
Collapse
 
aasthatalwaria profile image
Aastha Talwaria

Yes, this will also work. But, I was trying not to use extra space.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay