Skip to content
Related Articles

Related Articles

Find permutation with maximum remainder Sum
  • Last Updated : 26 Sep, 2019

Given an integer N, the task is to find a permutation of the integers from 1 to N such that \sum_{i=1}^{N}P_i\mod i is maximum.

Examples:

Input: N = 3
Output: 3 1 2
Sum of the remainder values is (0 + 1 + 2) = 3
which is the maximum possible.

Input: N = 5
Output: 5 1 2 3 4

Approach: As it is known that the maximum value of a number X after doing the mod with Y is Y-1. The permutation that will yield the maximum sum of the mosulus values will be {N, 1, 2, 3, …., N – 1}.



After evaluating the expression P_i\mod i on the above array the output array will be {0, 1, 2, 3, …., N – 1} and this is the maximum value that can be obtained.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to find the permutation
vector<int> Findpermutation(int n)
{
    vector<int> a(n + 1);
  
    // Put n at the first index 1
    a[1] = n;
  
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
  
    return a;
}
  
// Driver code
int main()
{
    int n = 8;
  
    vector<int> v = Findpermutation(n);
  
    // Display the permutation
    for (int i = 1; i <= n; i++)
        cout << v[i] << ' ';
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
class GFG 
{
  
// Function to find the permutation
static int[] Findpermutation(int n)
{
    int [] a = new int[n + 1];
  
    // Put n at the first index 1
    a[1] = n;
  
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
  
    return a;
}
  
// Driver code
public static void main(String[] args) 
{
    int n = 8;
  
    int []v = Findpermutation(n);
  
    // Display the permutation
    for (int i = 1; i <= n; i++)
        System.out.print(v[i] + " ");
}
  
// This code is contributed by 29AjayKumar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# Function to find the permutation 
def Findpermutation(n) :
  
    a = [0] * (n + 1); 
  
    # Put n at the first index 1 
    a[1] = n; 
  
    # Put all the numbers from 
    # 2 to n sequentially 
    for i in range(2, n + 1) :
        a[i] = i - 1
  
    return a; 
  
# Driver code 
if __name__ == "__main__"
  
    n = 8
  
    v = Findpermutation(n); 
  
    # Display the permutation 
    for i in range(1, n + 1) :
        print(v[i], end = ' '); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
  
class GFG 
{
  
// Function to find the permutation
static int[] Findpermutation(int n)
{
    int [] a = new int[n + 1];
  
    // Put n at the first index 1
    a[1] = n;
  
    // Put all the numbers from
    // 2 to n sequentially
    for (int i = 2; i <= n; i++)
        a[i] = i - 1;
  
    return a;
}
  
// Driver code
public static void Main(String[] args) 
{
    int n = 8;
  
    int []v = Findpermutation(n);
  
    // Display the permutation
    for (int i = 1; i <= n; i++)
        Console.Write(v[i] + " ");
}
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

8 1 2 3 4 5 6 7

Time Complexity: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :