Skip to content

Files

Latest commit

Jul 23, 2023
e1b8af0 · Jul 23, 2023

History

History

0870-Advantage Shuffle

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
No commit message
Jul 23, 2023
No commit message
Jul 23, 2023
No commit message
Jul 23, 2023
No commit message
Jul 23, 2023

README.md

870. Advantage Shuffle

Given two arrays A and B of equal size, the advantage of A with respect to B is the number of indices i for which A[i] > B[i].

Return any permutation of A that maximizes its advantage with respect to B.

Example 1:

Input: A = [2,7,11,15], B = [1,10,4,11]
Output: [2,11,7,15]

Example 2:

Input: A = [12,24,8,32], B = [13,25,32,11]
Output: [24,32,8,12]

Note:

  1. 1 <= A.length = B.length <= 10000
  2. 0 <= A[i] <= 10^9
  3. 0 <= B[i] <= 10^9

Solutions (Ruby)

1. Greedy

# @param {Integer[]} a
# @param {Integer[]} b
# @return {Integer[]}
def advantage_count(a, b)
  i = 0
  j = b.length - 1
  indices = (0...b.length).to_a
  ret = Array.new(b.length)

  a.sort!
  indices.sort_by! { |k| -b[k] }

  indices.each do |k|
    if b[k] < a[j]
      ret[k] = a[j]
      j -= 1
    else
      ret[k] = a[i]
      i += 1
    end
  end

  ret
end

Solutions (Rust)

1. Greedy

impl Solution {
    pub fn advantage_count(mut a: Vec<i32>, b: Vec<i32>) -> Vec<i32> {
        let mut i = 0;
        let mut j = b.len() - 1;
        let mut indices = (0..b.len()).collect::<Vec<_>>();
        let mut ret = vec![0; b.len()];

        a.sort_unstable();
        indices.sort_unstable_by_key(|&k| -b[k]);

        for k in indices {
            if b[k] < a[j] {
                ret[k] = a[j];
                j -= 1;
            } else {
                ret[k] = a[i];
                i += 1;
            }
        }

        ret
    }
}