Move all values equal to K to the end of the Array

11 Aug, 2021
Given an array arr[] of size N and an integer K, the task is to print the array after moving all value equal to K at the end of the array.
Examples: 
Input: arr = [2, 1, 2, 2, 2, 3, 4, 2], K = 2 Output: [4, 1, 3, 2, 2, 2, 2, 2] Explanation: 2 is the number which has to be moved to the end of the array arr[]. Therefore, after making the change the array is [4, 1, 3, 2, 2, 2, 2, 2]. The numbers 4, 1, and 3 could be ordered differently. 
Input: arr = [1, 1, 3, 5, 6], K = 1 Output: [6, 5, 3, 1, 1 ] Explanation: 1 is the number which has to be moved to the end of the array arr[]. Therefore, after making the change the array is [6, 5, 3, 1, 1 ].   
Approach: To solve the problem mentioned above we use Two Pointer Technique.  
Initialize two pointers where the left pointer marks the start of the array and the other one that is right one marks the end of the array, respectively.Decrement the count of right pointer long as it points to K, and increment the left pointer as long as it doesn’t point to the integer m.When both pointers aren’t moving, swap their values in place.Repeat this process until the pointers pass each other.
Initialize two pointers where the left pointer marks the start of the array and the other one that is right one marks the end of the array, respectively.
Decrement the count of right pointer long as it points to K, and increment the left pointer as long as it doesn’t point to the integer m.
When both pointers aren’t moving, swap their values in place.
Repeat this process until the pointers pass each other.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ program to move all values// equal to K to the end of the Array #include <bits/stdc++.h>using namespace std; // Function to move the element to the endvector<int> moveElementToEnd(    vector<int> array, int toMove){    // Mark left pointer    int i = 0;     // Mark the right pointer    int j = array.size() - 1;     // Iterate until left pointer    // crosses the right pointer    while (i < j) {         while (i < j && array[j] == toMove)             // decrement right pointer            j--;         if (array[i] == toMove)             // swap the two elements            // in the array            swap(array[i], array[j]);         // increment left pointer        i++;    }     // return the result    return array;} // Driver codeint main(int argc, char* argv[]){     vector<int> arr = { 1, 1, 3, 5, 6 };    int K = 1;     vector<int> ans        = moveElementToEnd(arr, K);     for (int i = 0; i < arr.size(); i++)        cout << ans[i] << " ";     return 0;}
// Java program to move all values// equal to K to the end of the Arrayclass GFG{ // Function to move the element to the endstatic int[] moveElementToEnd(int []array,                              int toMove){    // Mark left pointer    int i = 0;     // Mark the right pointer    int j = array.length - 1;     // Iterate until left pointer    // crosses the right pointer    while (i < j)    {        while (i < j && array[j] == toMove)             // Decrement right pointer            j--;         if (array[i] == toMove)             // Swap the two elements            // in the array            swap(array, i, j);         // Increment left pointer        i++;    }     // Return the result    return array;} static int[] swap(int []arr, int i, int j){    int temp = arr[i];    arr[i] = arr[j];    arr[j] = temp;    return arr;} // Driver codepublic static void main(String[] args){    int []arr = { 1, 1, 3, 5, 6 };    int K = 1;    int []ans = moveElementToEnd(arr, K);     for(int i = 0; i < arr.length; i++)       System.out.print(ans[i] + " ");}} // This code is contributed by Princi Singh
# Python3 program to move all values# equal to K to the end of the Array  # Function to move the element to the enddef moveElementToEnd(array, toMove):         # Mark left pointer    i = 0      # Mark the right pointer    j = len(array) - 1      # Iterate until left pointer    # crosses the right pointer    while (i < j):          while (i < j and array[j] == toMove):              # decrement right pointer            j-=1          if (array[i] == toMove):              # swap the two elements            # in the array            array[i], array[j] = array[j] , array[i]          # increment left pointer        i += 1      # return the result    return array  # Driver codeif __name__ =="__main__":      arr = [ 1, 1, 3, 5, 6 ]    K = 1    ans = moveElementToEnd(arr, K)    for i in range(len(arr)):        print(ans[i] ,end= " ")  # This code is contributed by chitranayal
// C# program to move all values// equal to K to the end of the Arrayusing System;class GFG{ // Function to move the element to the endstatic int[] moveElementToEnd(int []array,                              int toMove){    // Mark left pointer    int i = 0;     // Mark the right pointer    int j = array.Length - 1;     // Iterate until left pointer    // crosses the right pointer    while (i < j)    {        while (i < j && array[j] == toMove)             // Decrement right pointer            j--;         if (array[i] == toMove)             // Swap the two elements            // in the array            swap(array, i, j);         // Increment left pointer        i++;    }     // Return the result    return array;} static int[] swap(int []arr, int i, int j){    int temp = arr[i];    arr[i] = arr[j];    arr[j] = temp;    return arr;} // Driver codepublic static void Main(string[] args){    int []arr = { 1, 1, 3, 5, 6 };    int K = 1;    int []ans = moveElementToEnd(arr, K);     for(int i = 0; i < arr.Length; i++)    Console.Write(ans[i] + " ");}} // This code is contributed by rock_cool
<script>     // Javascript program to move all values    // equal to K to the end of the Array         // Function to move the element to the end    function moveElementToEnd(array, toMove)    {        // Mark left pointer        let i = 0;         // Mark the right pointer        let j = array.length - 1;         // Iterate until left pointer        // crosses the right pointer        while (i < j)        {            while (i < j && array[j] == toMove)                 // Decrement right pointer                j--;             if (array[i] == toMove)                 // Swap the two elements                // in the array                swap(array, i, j);             // Increment left pointer            i++;        }         // Return the result        return array;    }     function swap(arr, i, j)    {        let temp = arr[i];        arr[i] = arr[j];        arr[j] = temp;        return arr;    }         let arr = [ 1, 1, 3, 5, 6 ];    let K = 1;    let ans = moveElementToEnd(arr, K);       for(let i = 0; i < arr.length; i++)       document.write(ans[i] + " "); </script>
6 5 3 1 1
 
Time complexity: O(N), where N is the length of the array.Space complexity: O(1) 
ukasp
princi singh
rock_cool
divyesh072019
arorakashish0911
Arrays
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Window Sliding Technique
Search, insert and delete in an unsorted array
Chocolate Distribution Problem
Find duplicates in O(n) time and O(1) extra space | Set 1
What is Data Structure: Types, Classifications and Applications
Next Greater Element
Move all negative numbers to beginning and positive to end with constant extra space
Count pairs with given sum
Find subarray with given sum | Set 1 (Nonnegative Numbers)