📌  相关文章
📜  以降序重新排列数组的所有元素,这些元素是x的倍数

📅  最后修改于: 2021-05-31 20:28:57             🧑  作者: Mango

给定一个由整数arr []和一个整数x组成的数组,任务是按照相对位置的降序对数组中所有x的倍数进行降序排序,即不得影响其他元素的位置。

例子:

方法:

  1. 遍历数组,并检查数字是否为x的倍数。如果是,请将其存储在向量中。
  2. 然后,以降序对向量进行排序。
  3. 再次遍历数组,并用矢量元素一一替换5的倍数的元素。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to sort all the
// multiples of x from the
// array in decreasing order
void sortMultiples(int arr[], int n, int x)
{
    vector v;
 
    // Insert all multiples of x to a vector
    for (int i = 0; i < n; i++)
        if (arr[i] % x == 0)
            v.push_back(arr[i]);
 
    // Sort the vector in descending
    sort(v.begin(), v.end(), std::greater());
 
    int j = 0;
 
    // update the array elements
    for (int i = 0; i < n; i++) {
        if (arr[i] % x == 0)
            arr[i] = v[j++];
    }
}
 
// Utility function to print the array
void printArray(int arr[], int N)
{
    // Print the array
    for (int i = 0; i < N; i++) {
        cout << arr[i] << " ";
    }
}
 
// Driver code
int main()
{
    int arr[] = { 125, 3, 15, 6, 100, 5 };
    int x = 5;
    int n = sizeof(arr) / sizeof(arr[0]);
 
    sortMultiples(arr, n, x);
 
    printArray(arr, n);
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
    // Function to sort all the
    // multiples of x from the
    // array in decreasing order
    static void sortMultiples(int arr[], int n, int x)
    {
        Vector v = new Vector();
 
        // Insert all multiples of x to a vector
        for (int i = 0; i < n; i++)
        {
            if (arr[i] % x == 0)
            {
                v.add(arr[i]);
            }
        }
 
        // Sort the vector in descending
        Collections.sort(v, Collections.reverseOrder());
 
        int j = 0;
 
        // update the array elements
        for (int i = 0; i < n; i++)
        {
            if (arr[i] % x == 0)
            {
                arr[i] = v.get(j++);
            }
        }
    }
 
    // Utility function to print the array
    static void printArray(int arr[], int N)
    {
        // Print the array
        for (int i = 0; i < N; i++)
        {
            System.out.print(arr[i] + " ");
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = {125, 3, 15, 6, 100, 5};
        int x = 5;
        int n = arr.length;
 
        sortMultiples(arr, n, x);
 
        printArray(arr, n);
    }
}
 
// This code has been contributed by 29AjayKumar


Python3
# Python3 implementation of the approach
 
# Function to sort all the
# multiples of x from the
# array in decreasing order
def sortMultiples(arr, n, x) :
    v = []
 
    # Insert all multiples of x
    # to a vector
    for i in range(n) :
        if (arr[i] % x == 0) :
            v.append(arr[i])
 
    # Sort the vector in descending
    v.sort(reverse = True)
    j = 0
 
    # update the array elements
    for i in range(n) :
        if (arr[i] % x == 0) :
            arr[i] = v[j]
            j += 1
             
# Utility function to print the array
def printArray(arr, N) :
 
    # Print the array
    for i in range(N) :
        print(arr[i], end = " ")
 
# Driver code
if __name__ == "__main__" :
 
    arr= [ 125, 3, 15, 6, 100, 5 ]
    x = 5
    n = len(arr)
     
    sortMultiples(arr, n, x)
 
    printArray(arr, n)
 
# This code is contributed by Ryuga


C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
    // Function to sort all the
    // multiples of x from the
    // array in decreasing order
    static void sortMultiples(int []arr, int n, int x)
    {
        List v = new List();
 
        // Insert all multiples of x to a vector
        for (int i = 0; i < n; i++)
        {
            if (arr[i] % x == 0)
            {
                v.Add(arr[i]);
            }
        }
 
        // Sort the vector in descending
        v.Sort();
        v.Reverse();
 
        int j = 0;
 
        // update the array elements
        for (int i = 0; i < n; i++)
        {
            if (arr[i] % x == 0)
            {
                arr[i] = v[j++];
            }
        }
    }
 
    // Utility function to print the array
    static void printArray(int []arr, int N)
    {
        // Print the array
        for (int i = 0; i < N; i++)
        {
            Console.Write(arr[i] + " ");
        }
    }
 
    // Driver code
    public static void Main()
    {
        int []arr = {125, 3, 15, 6, 100, 5};
        int x = 5;
        int n = arr.Length;
 
        sortMultiples(arr, n, x);
 
        printArray(arr, n);
    }
}
 
/* This code contributed by PrinciRaj1992 */


PHP


Javascript


输出:
125 3 100 6 15 5

时间复杂度: O(n)

想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”