📌  相关文章
📜  将所有等于 K 的值移动到数组的末尾

📅  最后修改于: 2021-09-04 08:18:14             🧑  作者: Mango

给定一个大小为N的数组arr[]和一个整数K ,任务是在移动数组末尾的所有等于K 的值后打印数组。
例子:

方法:为了解决上面提到的问题,我们使用了两个指针技术

  1. 分别初始化两个指针,左指针标记数组的开始,右指针分别标记数组的结尾。
  2. 当右指针指向K 时,递减右指针的计数,并在左指针不指向整数 m 时递增。
  3. 当两个指针都没有移动时,就地交换它们的值。
  4. 重复这个过程,直到指针相互传递。

下面是上述方法的实现:

C++
// C++ program to move all values
// equal to K to the end of the Array
 
#include 
using namespace std;
 
// Function to move the element to the end
vector moveElementToEnd(
    vector array, int toMove)
{
    // Mark left pointer
    int i = 0;
 
    // Mark the right pointer
    int j = array.size() - 1;
 
    // Iterate untill 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 code
int main(int argc, char* argv[])
{
 
    vector arr = { 1, 1, 3, 5, 6 };
    int K = 1;
 
    vector ans
        = moveElementToEnd(arr, K);
 
    for (int i = 0; i < arr.size(); i++)
        cout << ans[i] << " ";
 
    return 0;
}


Java
// Java program to move all values
// equal to K to the end of the Array
class GFG{
 
// Function to move the element to the end
static int[] moveElementToEnd(int []array,
                              int toMove)
{
    // Mark left pointer
    int i = 0;
 
    // Mark the right pointer
    int j = array.length - 1;
 
    // Iterate untill 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 code
public 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
# Python3 program to move all values
# equal to K to the end of the Array
  
# Function to move the element to the end
def moveElementToEnd(array, toMove):
     
    # Mark left pointer
    i = 0
  
    # Mark the right pointer
    j = len(array) - 1
  
    # Iterate untill 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 code
if __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#
// C# program to move all values
// equal to K to the end of the Array
using System;
class GFG{
 
// Function to move the element to the end
static int[] moveElementToEnd(int []array,
                              int toMove)
{
    // Mark left pointer
    int i = 0;
 
    // Mark the right pointer
    int j = array.Length - 1;
 
    // Iterate untill 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 code
public 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


Javascript


输出:
6 5 3 1 1

时间复杂度: O(N) ,其中 N 是数组的长度。
空间复杂度: O(1)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live