ย้ายองค์ประกอบเชิงลบทั้งหมดไปสิ้นสุดตามลำดับโดยอนุญาตให้มีพื้นที่ว่างเพิ่มเติม  


ระดับความยาก สะดวกสบาย
ถามบ่อยใน ทุนหนึ่ง ซิทริกซ์ ไอบีเอ็ม SAP Labs Taxi4Sure Twilio
แถว

คำชี้แจงปัญหา  

“ ย้ายองค์ประกอบเชิงลบทั้งหมดไปสิ้นสุดตามลำดับที่อนุญาตให้มีช่องว่างเพิ่มเติม” ระบุว่าคุณจะได้รับอาร์เรย์ที่มีทั้งตัวเลขบวกและลบ คำสั่งปัญหาขอให้ย้ายองค์ประกอบเชิงลบทั้งหมดในส่วนสุดท้ายของอาร์เรย์

ตัวอย่าง  

arr[] = { 1,2,-3,-5,2,7,-9,-11 }
1, 2, 2, 7, -3, -5, -9, -11
คำอธิบาย: ค่าลบทั้งหมดถูกเลื่อนไปที่สุดท้ายของอาร์เรย์ และอยู่ในลำดับเริ่มต้นเช่นกัน

อัลกอริทึมเพื่อย้ายองค์ประกอบเชิงลบทั้งหมดไปสิ้นสุดตามลำดับที่อนุญาตให้มีพื้นที่ว่างเพิ่มเติม  

1. Declare an array same as the size of the original array.
2. Traverse the array and check if any number is greater than or equal to 0,
    1. If true then copy that number from the 0th position of the array we created.
3. Now traverse the array and check if any of the numbers is less than 0.
    1. If true, then copy that value to the array we created from the next position where the positive number ends.
4. Now copy that temporary array we created into the original array and print that array.

คำอธิบาย

เราได้รับไฟล์ จำนวนเต็ม อาร์เรย์ที่มีทั้งจำนวนลบและบวก เราได้ขอให้จัดเรียงอาร์เรย์ใหม่ในลักษณะที่เราต้องย้ายองค์ประกอบเชิงลบทั้งหมดไปที่สุดท้าย / สิ้นสุดของอาร์เรย์ จากนั้นเราจะข้ามอาร์เรย์สำหรับองค์ประกอบบวกและลบแยกกัน ขั้นแรกเราต้องดำเนินการกับองค์ประกอบเชิงบวกโดยเราต้องดึงมันไปทางซ้าย จากนั้นเลื่อนองค์ประกอบเชิงลบทั้งหมดไปทางขวา

ดูสิ่งนี้ด้วย
คำที่ซ้ำกันมากที่สุดเป็นอันดับสองในลำดับ

เราต้องสร้างอาร์เรย์พิเศษที่มีขนาดเท่ากับอาร์เรย์เดิม เนื่องจากในนี้เราจะจัดเก็บการจัดเรียงตัวเลขที่ต้องการ เลือกดัชนีตัวแปรและเริ่มต้นเป็น 0 ตัวแปรนี้จะช่วยให้เราแยกความแตกต่างระหว่างองค์ประกอบบวกและลบ ตอนนี้เราสร้างอาร์เรย์ เราจะใส่ตัวเลขบวกจากอาร์เรย์เดิมไปยังอาร์เรย์ชั่วคราว

เราจะตรวจสอบในขณะที่สำรวจว่าองค์ประกอบอาร์เรย์มีค่ามากกว่าหรือเท่ากับ 0 หรือไม่จากนั้นคัดลอกองค์ประกอบนั้นลงในอาร์เรย์ชั่วคราวจากตำแหน่งเริ่มต้นของอาร์เรย์ชั่วคราว นอกจากนี้เรากำลังเพิ่มค่าดัชนีพร้อมกันดังนั้นเนื่องจากเราคัดลอกองค์ประกอบบวกครั้งสุดท้ายเราจึงมีดัชนีค่าเป็นองค์ประกอบถัดไปที่จะจัดเก็บด้วยความช่วยเหลือจากสิ่งนี้เราจะผลักดันองค์ประกอบเชิงลบทั้งหมดในที่สุด

ตอนนี้เราจะไปสำรวจอาร์เรย์อีกครั้งและตรวจสอบว่าแต่ละองค์ประกอบน้อยกว่า 0 หรือไม่ถ้าเป็นศูนย์จากนั้นเริ่มผลักดันค่านั้นไปยังอาร์เรย์ชั่วคราวจากค่าดัชนีที่เราทิ้งไว้ ในที่สุดให้คัดลอกอาร์เรย์นั้นไปยังอาร์เรย์ดั้งเดิมจากนั้นพิมพ์หรือเพียงแค่พิมพ์อาร์เรย์ชั่วคราวทั้งสองเป็นสิ่งเดียวกัน และเราได้ผลลัพธ์ที่ต้องการ

ย้ายองค์ประกอบเชิงลบทั้งหมดไปสิ้นสุดตามลำดับโดยอนุญาตให้มีพื้นที่ว่างเพิ่มเติมหมุด

รหัส  

รหัส C ++ เพื่อย้ายองค์ประกอบเชิงลบทั้งหมดไปสิ้นสุดตามลำดับที่อนุญาตให้มีพื้นที่ว่างเพิ่มเติม

#include<bits/stdc++.h>
using namespace std;

void segregateElements(int arr[], int n)
{
    int temp[n];

    int j = 0;

    for (int i = 0; i < n ; i++)
        if (arr[i] >= 0 )
            temp[j++] = arr[i];

    if (j == n || j == 0)
        return;

    for (int i = 0 ; i < n ; i++)
        if (arr[i] < 0)
            temp[j++] = arr[i];

    memcpy(arr, temp, sizeof(temp));
}

void printArray(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

int main()
{
    int arr[] = { 1,2,-3,-5,2,7,-9,-11 };
    int n = sizeof(arr)/sizeof(arr[0]);

    segregateElements(arr, n);
    printArray(arr,n);

    return 0;
}
1 2 2 7 -3 -5 -9 -11

รหัส Java เพื่อย้ายองค์ประกอบเชิงลบทั้งหมดไปสิ้นสุดตามลำดับที่อนุญาตให้มีพื้นที่ว่างเพิ่มเติม

import java.util.Arrays;

class moveNegativeElement
{
    public static void segregateElements(int arr[], int n)
    {
        int temp[] = new int[n];

        int j = 0;

        for (int i = 0; i < n; i++)
            if (arr[i] >= 0)
                temp[j++] = arr[i];

        if (j == n || j == 0)
            return;

        for (int i = 0; i < n; i++)
            if (arr[i] < 0)
                temp[j++] = arr[i];

        for (int i = 0; i < n; i++)
            arr[i] = temp[i];
    }
    public static void printArray(int arr[], int n)
    {
        for (int i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
    }
    public static void main(String arg[])
    {
        int arr[] = { 1,2,-3,-5,2,7,-9,-11 };
        int n = arr.length;

        segregateElements(arr, n);
        printArray(arr,n);

    }
}
1 2 2 7 -3 -5 -9 -11

การวิเคราะห์ความซับซ้อน  

ความซับซ้อนของเวลา

บน) ที่ไหน “ N” คือองค์ประกอบในอาร์เรย์ เราเพิ่งสำรวจอาร์เรย์เนื่องจากเราได้บรรลุความซับซ้อนของเวลาเชิงเส้น

ดูสิ่งนี้ด้วย
การแบ่งอาร์เรย์สามวิธีรอบ ๆ ช่วงที่กำหนด

ความซับซ้อนของอวกาศ

บน) ที่ไหน “ N” คือองค์ประกอบในอาร์เรย์ เราได้สร้างอาร์เรย์พิเศษสำหรับการใช้งานชั่วคราวซึ่งเราได้จัดเก็บองค์ประกอบในลักษณะที่ต้องการ