给定一个由整数arr []和一个整数x组成的数组,任务是按照相对位置的降序对数组中所有x的倍数进行降序排序,即不得影响其他元素的位置。
例子:
Input: arr[] = {10, 5, 8, 2, 15}, x = 5
Output: 15 10 8 2 5
We rearrange all multiples of 5 (i.e. 10, 5 and 15) in decreasing order in their relative positions, keeping other elements same.
Input: arr[] = {100, 12, 25, 50, 5}, x = 5
Output: 100 12 50 25 5
方法:
- 遍历数组,并检查数字是否为x的倍数。如果是,请将其存储在向量中。
- 然后,以降序对向量进行排序。
- 再次遍历数组,并用矢量元素一一替换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等的更多准备工作,请参阅“完整面试准备课程” 。