Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Relative Sort Array

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "1122" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Given two arrays arr1 and arr2, the elements of arr2 are distinct, and all elements in arr2 are also in arr1. Sort the elements of arr1 such that the relative ordering of items in arr1 are the same as in arr2. Elements that do not appear in arr2 should be placed at the end of arr1 in ascending order. Example 1: Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] Output: [2,2,2,1,4,3,3,9,6,7,19] Example 2: Input: arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6] Output: [22,28,8,6,17,44] Constraints: 1 <= arr1.length, arr2.length <= 1000 0 <= arr1[i], arr2[i] <= 1000 All the elements of arr2 are distinct. Each arr2[i] is in arr1.

Explanation

Here's an efficient solution to the problem, along with explanations:

  • Frequency Counting: Use a hash map (dictionary in Python) to count the occurrences of each element in arr1. This allows O(1) access to the frequency of each number.
  • Ordered Placement: Iterate through arr2. For each element in arr2, append it to the result array the number of times it appears in arr1 (based on the frequency counts). Simultaneously, remove these elements from the frequency map.
  • Remaining Elements: The remaining elements in the frequency map are those not present in arr2. Sort these elements and append them to the result array.

  • Runtime Complexity: O(n + m log k), where n is the length of arr1, m is the length of arr2, and k is the number of distinct elements in arr1 but not in arr2. This arises from iterating through both arrays and the sorting of remaining elements. Storage Complexity: O(n), due to the frequency map.

Code

    def relative_sort_array(arr1, arr2):
    """
    Sorts arr1 according to the relative ordering of arr2,
    placing elements not in arr2 at the end in ascending order.
    """

    counts = {}
    for x in arr1:
        counts[x] = counts.get(x, 0) + 1

    result = []
    for y in arr2:
        if y in counts:
            result.extend([y] * counts[y])
            del counts[y]

    remaining = sorted(counts.keys())
    for z in remaining:
        result.extend([z] * counts[z])

    return result

More from this blog

C

Chatmagic blog

2894 posts