返回

LeetCode 1122 数组的相对排序:轻松掌控基础排序算法

前端

前言:

在计算机科学中,排序算法对于处理和组织数据至关重要。它们使我们能够对数据集进行排序,从而可以轻松地找到所需的信息、执行比较或进行进一步的分析。LeetCode 1122 数组的相对排序问题是一个很好的起点,可以帮助您熟悉排序算法的基本概念。

问题陈述:

LeetCode 1122 数组的相对排序问题给出了两个整数数组 arr1 和 arr2,其中 arr2 中的元素各不相同。该问题的目标是根据 arr2 中元素出现的顺序对 arr1 进行排序。例如,如果 arr1 = [2, 3, 1, 3, 2] 和 arr2 = [2, 1, 3],则输出应该为 [2, 2, 1, 3, 3]。

解决方案:

Python:

def relativeSortArray(arr1, arr2):
    result = []
    for element in arr2:
        while element in arr1:
            result.append(element)
            arr1.remove(element)
    result.extend(arr1)
    return result

C++:

vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
    unordered_map<int, int> element_count;
    for (int num : arr1) {
        element_count[num]++;
    }
    vector<int> result;
    for (int num : arr2) {
        while (element_count[num] > 0) {
            result.push_back(num);
            element_count[num]--;
        }
    }
    for (auto it = element_count.begin(); it != element_count.end(); ++it) {
        while (it->second > 0) {
            result.push_back(it->first);
            it->second--;
        }
    }
    return result;
}

Java:

public int[] relativeSortArray(int[] arr1, int[] arr2) {
    int[] count = new int[1001];
    for (int num : arr1) {
        count[num]++;
    }
    int index = 0;
    for (int num : arr2) {
        while (count[num] > 0) {
            arr1[index++] = num;
            count[num]--;
        }
    }
    for (int i = 0; i < 1001; i++) {
        while (count[i] > 0) {
            arr1[index++] = i;
            count[i]--;
        }
    }
    return arr1;
}

结论:

LeetCode 1122 数组的相对排序是一个基础但重要的算法问题,它可以帮助您提高对排序算法的理解和应用。通过本文中提供的 Python、C++ 和 Java 解决方案,您可以轻松解决此问题并提升您的编程技能。记住,算法的本质在于通过代码解决问题,因此不要害怕尝试不同的方法,并不断提高您的编码能力。