# Permute two arrays such that sum of every pair is greater or equal to K

Given two arrays of equal size **n** and an integer **k**. The task is to permute both arrays such that sum of their corresponding element is greater than or equal to k i.e a[i] + b[i] >= k. The task is print “Yes” if any such permutation exists, otherwise print “No”.**Examples :**

Input :a[] = {2, 1, 3}, b[] = { 7, 8, 9 }, k = 10.Output :Yes Permutation a[] = { 1, 2, 3 } and b[] = { 9, 8, 7 } satisfied the condition a[i] + b[i] >= K.Input :a[] = {1, 2, 2, 1}, b[] = { 3, 3, 3, 4 }, k = 5.Output :No

The idea is to sort one array in ascending order and another array in descending order and if any index does not satisfy the condition a[i] + b[i] >= K then print “No”, else print “Yes”.

If the condition fails on sorted arrays, then there exists no permutation of arrays which can satisfy the inequality. **Proof,**

Assume **a _{sort}[]** be sorted a[] in ascending order and

**b**be sorted b[] in descending order.

_{sort}[]Let new permutation b[] is created by swapping any two indices i, j of b

_{sort}[],

**Case 1:**i < j and element at b[i] is now b_{sort}[j].

Now, a_{sort}[i] + b_{sort}[j] < K, because b_{sort}[i] > b_{sort}[j] as b[] is sorted in decreasing order and we know a_{sort}[i] + b_{sort}[i] < k.**Case 2:**i > j and element at b[i] is now b_{sort}[j].

Now, a_{sort}[j] + b_{sort}[i] < k, because a_{sort}[i] > a_{sort}[j] as a[] is sorted in increasing order and we know a_{sort}[i] + b_{sort}[i] < k.

Below is the implementation is this approach:

## C++

`// C++ program to check whether permutation of two` `// arrays satisfy the condition a[i] + b[i] >= k.` `#include<bits/stdc++.h>` `using` `namespace` `std;` `// Check whether any permutation exists which` `// satisfy the condition.` `bool` `isPossible(` `int` `a[], ` `int` `b[], ` `int` `n, ` `int` `k)` `{` ` ` `// Sort the array a[] in decreasing order.` ` ` `sort(a, a + n);` ` ` `// Sort the array b[] in increasing order.` ` ` `sort(b, b + n, greater<` `int` `>());` ` ` `// Checking condition on each index.` ` ` `for` `(` `int` `i = 0; i < n; i++)` ` ` `if` `(a[i] + b[i] < k)` ` ` `return` `false` `;` ` ` `return` `true` `;` `}` `// Driven Program` `int` `main()` `{` ` ` `int` `a[] = { 2, 1, 3 };` ` ` `int` `b[] = { 7, 8, 9 };` ` ` `int` `k = 10;` ` ` `int` `n = ` `sizeof` `(a)/` `sizeof` `(a[0]);` ` ` `isPossible(a, b, n, k) ? cout << ` `"Yes"` `:` ` ` `cout << ` `"No"` `;` ` ` `return` `0;` `}` |

## Java

`// Java program to check whether` `// permutation of two arrays satisfy` `// the condition a[i] + b[i] >= k.` `import` `java.util.*;` `class` `GFG` `{` `// Check whether any permutation` `// exists which satisfy the condition.` `static` `boolean` `isPossible(Integer a[], ` `int` `b[],` ` ` `int` `n, ` `int` `k)` `{` ` ` `// Sort the array a[] in decreasing order.` ` ` `Arrays.sort(a, Collections.reverseOrder());` ` ` `// Sort the array b[] in increasing order.` ` ` `Arrays.sort(b);` ` ` `// Checking condition on each index.` ` ` `for` `(` `int` `i = ` `0` `; i < n; i++)` ` ` `if` `(a[i] + b[i] < k)` ` ` `return` `false` `;` ` ` `return` `true` `;` `}` `// Driver code` `public` `static` `void` `main(String[] args) {` ` ` `Integer a[] = {` `2` `, ` `1` `, ` `3` `};` ` ` `int` `b[] = {` `7` `, ` `8` `, ` `9` `};` ` ` `int` `k = ` `10` `;` ` ` `int` `n = a.length;` ` ` `if` `(isPossible(a, b, n, k))` ` ` `System.out.print(` `"Yes"` `);` ` ` `else` ` ` `System.out.print(` `"No"` `);` `}` `}` `// This code is contributed by Anant Agarwal.` |

## Python3

`# Python program to check` `# whether permutation of two` `# arrays satisfy the condition` `# a[i] + b[i] >= k.` `# Check whether any` `# permutation exists which` `# satisfy the condition.` `def` `isPossible(a,b,n,k):` ` ` `# Sort the array a[]` ` ` `# in decreasing order.` ` ` `a.sort(reverse` `=` `True` `)` ` ` ` ` `# Sort the array b[]` ` ` `# in increasing order.` ` ` `b.sort()` ` ` ` ` `# Checking condition` ` ` `# on each index.` ` ` `for` `i ` `in` `range` `(n):` ` ` `if` `(a[i] ` `+` `b[i] < k):` ` ` `return` `False` ` ` ` ` `return` `True` `# Driver code` `a ` `=` `[ ` `2` `, ` `1` `, ` `3` `]` `b ` `=` `[` `7` `, ` `8` `, ` `9` `]` `k ` `=` `10` `n ` `=` `len` `(a)` ` ` `if` `(isPossible(a, b, n, k)):` ` ` `print` `(` `"Yes"` `)` `else` `:` ` ` `print` `(` `"No"` `)` `# This code is contributed` `# by Anant Agarwal.` |

## C#

`// C# program to check whether` `// permutation of two arrays satisfy` `// the condition a[i] + b[i] >= k.` `using` `System;` `class` `GFG` `{` `// Check whether any permutation` `// exists which satisfy the condition.` `static` `bool` `isPossible(` `int` `[]a, ` `int` `[]b,` ` ` `int` `n, ` `int` `k)` `{` ` ` `// Sort the array a[]` ` ` `// in decreasing order.` ` ` `Array.Sort(a);` ` ` `// Sort the array b[]` ` ` `// in increasing order.` ` ` `Array.Reverse(b);` ` ` `// Checking condition on each index.` ` ` `for` `(` `int` `i = 0; i < n; i++)` ` ` `if` `(a[i] + b[i] < k)` ` ` `return` `false` `;` ` ` `return` `true` `;` `}` `// Driver code` `public` `static` `void` `Main()` `{` ` ` `int` `[]a = {2, 1, 3};` ` ` `int` `[]b = {7, 8, 9};` ` ` `int` `k = 10;` ` ` `int` `n = a.Length;` ` ` `if` `(isPossible(a, b, n, k))` ` ` `Console.WriteLine(` `"Yes"` `);` ` ` `else` ` ` `Console.WriteLine(` `"No"` `);` `}` `}` `// This code is contributed by anuj_67.` |

## PHP

`<?php` `// PHP program to check whether` `// permutation of two arrays satisfy` `// the condition a[i] + b[i] >= k.` `// Check whether any permutation` `// exists which satisfy the condition.` `function` `isPossible( ` `$a` `, ` `$b` `, ` `$n` `, ` `$k` `)` `{` ` ` ` ` `// Sort the array a[] in` ` ` `// decreasing order.` ` ` `sort(` `$a` `);` ` ` `// Sort the array b[] in` ` ` `// increasing order.` ` ` `rsort(` `$b` `);` ` ` `// Checking condition on each` ` ` `// index.` ` ` `for` `( ` `$i` `= 0; ` `$i` `< ` `$n` `; ` `$i` `++)` ` ` `if` `(` `$a` `[` `$i` `] + ` `$b` `[` `$i` `] < ` `$k` `)` ` ` `return` `false;` ` ` `return` `true;` `}` `// Driven Program` ` ` `$a` `= ` `array` `( 2, 1, 3 );` ` ` `$b` `= ` `array` `( 7, 8, 9 );` ` ` `$k` `= 10;` ` ` `$n` `= ` `count` `(` `$a` `);` ` ` `if` `(isPossible(` `$a` `, ` `$b` `, ` `$n` `, ` `$k` `))` ` ` `echo` `"Yes"` `;` ` ` `else` ` ` `echo` `"No"` `;` `// This code is contributed by` `// anuj_67.` `?>` |

## Javascript

`<script>` ` ` `// JavaScript program to check whether` ` ` `// permutation of two arrays satisfy` ` ` `// the condition a[i] + b[i] >= k.` ` ` ` ` `// Check whether any permutation` ` ` `// exists which satisfy the condition.` ` ` `function` `isPossible(a, b, n, k)` ` ` `{` ` ` `// Sort the array a[]` ` ` `// in decreasing order.` ` ` `a.sort(` `function` `(a, b){` `return` `a - b});` ` ` `// Sort the array b[]` ` ` `// in increasing order.` ` ` `b.reverse();` ` ` `// Checking condition on each index.` ` ` `for` `(let i = 0; i < n; i++)` ` ` `if` `(a[i] + b[i] < k)` ` ` `return` `false` `;` ` ` `return` `true` `;` ` ` `}` ` ` ` ` `let a = [2, 1, 3];` ` ` `let b = [7, 8, 9];` ` ` `let k = 10;` ` ` `let n = a.length;` ` ` ` ` `if` `(isPossible(a, b, n, k))` ` ` `document.write(` `"Yes"` `);` ` ` `else` ` ` `document.write(` `"No"` `);` ` ` `</script>` |

**Output: **

Yes

**Time Complexity:** O(n log n).

This article is contributed by **Anuj Chauhan**. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.