- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
C++ Permutation of an Array that has Smaller Values from Another Array
Two arrays, A and B, are given to us in this tutorial. For example, we need to output any permutation of A so that the indices for which A[ I ] > B[ I ] are maximized, for example
Input: A = [12, 22, 41, 13], B = [1, 20, 10, 12] Output: 12, 22, 41, 13 Input: A = [2, 5, 9, 7], B = [1, 12, 4, 54] Output: 2 7 5 9 Multiple answers can be present in that case we are simply going to print any one of the answers.
In this problem, we need to maximize the indices where A[ i ] > B[ i ], so we are going to solve this problem greedily.
Approach to Find the Solution
In this approach, we will first sort both arrays now; we check greedily for each index of array B such that A[ i ] is more significant than it and then place that element in a vector.
Example
#include <bits/stdc++.h> using namespace std; int main(){ int A[] = { 2, 5, 9, 7 }; int B[] = { 1, 12, 4, 54 }; int n = sizeof(A) / sizeof(int); // size of our arrays vector<pair<int, int> > A_pair, B_pair; /***********************We are linking element to its position***********/ for (int i = 0; i < n; i++) A_pair.push_back({A[i], i}); for (int i = 0; i < n; i++) B_pair.push_back({B[i], i}); /***********************************************************************/ /*****Sorting our pair vectors********************/ sort(A_pair.begin(), A_pair.end()); sort(B_pair.begin(), B_pair.end()); int i = 0, j = 0, ans[n]; memset(ans, -1, sizeof(ans)); // initializing all the elements with value -1 vector<int> remaining; // this will store our elements which have lesser value than elemnt present in B. while (i < n && j < n) { // as our array is sorted then if we find any element in //current index which has less value than B of current index then // automatically it will have less value than other elements of B // that's why we push such indices in remaining otherwise we push element in ans if (A_pair[i].first > B_pair[j].first) { ans[B_pair[j].second] = A_pair[i].first; i++; j++; } else { remaining.push_back(i); i++; } } j = 0; for (int i = 0; i < n; ++i){ // now if any index of answer is unchanged so that means //we need to fill that position with the remaining elements if (ans[i] == -1){ ans[i] = A_pair[remaining[j]].first; j++; } } for (int i = 0; i < n; i++) // printing our answer cout << ans[i] << " "; return 0; }
Output
2 7 5 9
Explanation of the Above Code
In this approach, we first link all the elements to their indices to still have their old index in it when we sort it. We sort both of the vectors of pairs now we greedily search for our answers as we move through both the arrays if we get an index of A_pair which has more excellent value than of B_pair, so we store that in our an array(and in the position of B_pair) else as we have sorted both the vectors, so we know that we won’t be able to use this value of A_pair, so we push that elements index in our remaining vector now we fill the array by the help of remaining vector, and then we print the answer.
Conclusion
In this tutorial, we solve a problem to find the Permutation of an array with smaller values from another array. We also learned the C++ program for this problem and the complete approach we solved. We can write the same program in other languages such as C, java, python, and other languages. We hope you find this tutorial helpful.
- Related Articles
- Maximum in an array that can make another array sorted in C++
- Make an array of another array's duplicate values in JavaScript
- Elements of an array that are not divisible by any element of another array in C++
- How to filter an array from all elements of another array – JavaScript?
- Copy values from one array to another in Numpy
- Can i refer an element of one array from another array in java?
- Getting elements of an array depending on corresponding values of another JavaScript
- Find next Smaller of next Greater in an array in C++
- Get values that are not present in another array in JavaScript
- Delete specific record from an array nested within another array in MongoDB?
- Deleting specific record from an array nested within another array in MongoDB
- How to copy a section of an array into another array in C#?
- Extract unique values from an array - JavaScript
- How to search an array for values present in another array and output the indexes of values found into a new array in MongoDB?
- Maximum possible XOR of every element in an array with another array in C++
