Minimum De-arrangements present in array of AP (Arithmetic Progression)
Given an array of n-elements. Given array is a permutation of some Arithmetic Progression. Find the minimum number of De-arrangements present in that array so as to make that array an Arithmetic progression.
Examples:
Input : arr[] = [8, 6, 10 ,4, 2]
Output : Minimum De-arrangement = 3
Explanation : arr[] = [10, 8, 6, 4, 2] is permutation
which forms an AP and has minimum de-arrangements.
Input : arr[] = [5, 10, 15, 25, 20]
Output : Minimum De-arrangement = 2
Explanation : arr[] = [5, 10, 15, 20, 25] is permutation
which forms an AP and has minimum de-arrangements.
As per property of Arithmetic Progression our sequence will be either in increasing or decreasing manner. Also, we know that reverse of any Arithmetic Progression also form another Arithmetic Progression. So, we create a copy of original array and then once sort our given array in increase order and find total count of mismatch again after that we will reverse our sorted array and found new count of mismatch. Comparing both the counts of mismatch we can find the minimum number of de-arrangements.
C++
#include<bits/stdc++.h>
using namespace std;
int countDe ( int arr[], int n)
{
vector < int > v (arr, arr+n);
sort(arr, arr+n);
int count1 = 0;
for ( int i=0; i<n; i++)
if (arr[i] != v[i])
count1++;
reverse(arr,arr+n);
int count2 = 0;
for ( int i=0; i<n; i++)
if (arr[i] != v[i])
count2++;
return (min (count1, count2));
}
int main()
{
int arr[] = {5, 9, 21, 17, 13};
int n = sizeof (arr)/ sizeof (arr[0]);
cout << "Minimum Dearrangement = " << countDe(arr, n);
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
import java.util.Arrays;
public class GeeksforGeeks{
public static int countDe( int arr[], int n){
int v[] = new int [n];
for ( int i = 0 ; i < n; i++)
v[i] = arr[i];
Arrays.sort(arr);
int count1 = 0 ;
for ( int i = 0 ; i < n; i++)
if (arr[i] != v[i])
count1++;
Collections.reverse(Arrays.asList(arr));
int count2 = 0 ;
for ( int i = 0 ; i < n; i++)
if (arr[i] != v[i])
count2++;
return (Math.min (count1, count2));
}
public static void main(String argc[]){
int arr[] = { 5 , 9 , 21 , 17 , 13 };
int n = 5 ;
System.out.println( "Minimum Dearrangement = " +
countDe(arr, n));
}
}
|
Python3
def countDe(arr, n):
i = 0
v = arr.copy()
arr.sort()
count1 = 0
i = 0
while ( i < n ):
if (arr[i] ! = v[i]):
count1 = count1 + 1
i = i + 1
arr.sort(reverse = True )
count2 = 0
i = 0
while ( i < n ):
if (arr[i] ! = v[i]):
count2 = count2 + 1
i = i + 1
return ( min (count1, count2))
arr = [ 5 , 9 , 21 , 17 , 13 ]
n = 5
print ( "Minimum Dearrangement =" ,countDe(arr, n))
|
C#
using System;
class GFG
{
public static int countDe( int [] arr,
int n)
{
int [] v = new int [n];
for ( int i = 0; i < n; i++)
v[i] = arr[i];
Array.Sort(arr);
int count1 = 0;
for ( int i = 0; i < n; i++)
if (arr[i] != v[i])
count1++;
Array.Reverse(arr);
int count2 = 0;
for ( int i = 0; i < n; i++)
if (arr[i] != v[i])
count2++;
return (Math.Min (count1, count2));
}
public static void Main()
{
int [] arr = new int []{5, 9, 21, 17, 13};
int n = 5;
Console.WriteLine( "Minimum Dearrangement = " +
countDe(arr, n));
}
}
|
PHP
<?php
function countDe ( $arr , $n )
{
$v = $arr ;
sort( $arr );
$count1 = 0;
for ( $i = 0; $i < $n ; $i ++)
if ( $arr [ $i ] != $v [ $i ])
$count1 ++;
rsort( $arr );
$count2 = 0;
for ( $i = 0; $i < $n ; $i ++)
if ( $arr [ $i ] != $v [ $i ])
$count2 ++;
return (min( $count1 , $count2 ));
}
$arr = array (5, 9, 21, 17, 13);
$n = count ( $arr );
echo "Minimum Dearrangement = " .
countDe( $arr , $n );
?>
|
Javascript
<script>
function countDe(arr, n)
{
let v = [];
for (let i = 0; i < n; i++)
v[i] = arr[i];
arr.sort();
let count1 = 0;
for (let i = 0; i < n; i++)
if (arr[i] != v[i])
count1++;
arr.reverse();
let count2 = 0;
for (let i = 0; i < n; i++)
if (arr[i] != v[i])
count2++;
return (Math.min (count1, count2));
}
let arr = [ 5, 9, 21, 17, 13 ];
let n = 5;
document.write( "Minimum Dearrangement = " +
countDe(arr, n));
</script>
|
Output:
Minimum Dearrangement = 2
Time Complexity: O(nlogn).
Auxiliary Space: O(n)
Last Updated :
13 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...