【问题标题】:How do I sort an array so it has the same order as another array?如何对数组进行排序,使其与另一个数组具有相同的顺序?
【发布时间】:2019-11-18 01:22:25
【问题描述】:

我有两个数组

int arr1 [] = {4, 6, 2, 6, 4, 8, 12, 14, 18, 4, 38};
int arr2 [] = {4, 2, 8, 6, 18, 12};

arr1 包含 arr1 的每个值,有时是多个值。

arr2 每个值只包含一次。

arr1 中元素的顺序应该与arr2 中元素的顺序相同。

在 arr1 中但不在 arr2 中的元素应该以相同的顺序附加到末尾。

这就是他们最终的样子:

new arr1[] = {4, 4, 4, 2, 8, 6, 6, 18, 12, 14, 38};

这是我尝试过的:

int [] temp = new int [arr1.length];

for (int i = 0; i<arr.length; i++){
    if (arr2[i] == arr1[i]){
        temp[arr2[i]] == arr1[i];
    }
}
for (int k = 0; k<arr1.length; k++){
    arr1[k] == temp[k];
    arr2[k] == k; 
}

【问题讨论】:

  • 如果这是我的问题,我会尝试用铅笔和纸制定一个算法,然后将其提交给代码。您需要嵌套循环以确保...解决它,并且您会想出一些东西,即使它没有带来解决方案,至少可以让您改进问题。
  • 实际上,使用 Comparator 调用 Arrays.sort(...) 并使用第二个数组来决定 compare 方法的返回值在这里也可以正常工作
  • arr1中元素的顺序应该和arr2中元素的顺序一致。int arr1 [] = {4, 6, 2, 6...int arr2 [] = {4, 2, 8, 6...他们不按顺序?跨度>
  • @HovercraftFullOfEels 我将如何使用这样的比较器?

标签: java arrays sorting


【解决方案1】:

您可以在 O(n) 时间和 O(n) 辅助空间内完成此操作,而无需使用排序算法。诀窍是计算 arr2 的每个元素在 Map 中出现的次数,然后使用该计数将那么多副本写入 arr1,使用 arr2 以使它们按正确的顺序排列。

为了使arr1 中缺少的元素保持相同的顺序,请将它们存储在一个列表中而不是计算它们,然后在最后将它们写回arr1

import java.util.*;

class Solution {
    public static void sortArrayByOtherArray(int[] arr1, int[] arr2) {
        Map<Integer, Integer> counts = new HashMap<>();
        List<Integer> extras = new ArrayList<>();

        // initialise counter Map
        for(int x : arr2) {
            counts.put(x, 0);
        }

        // count occurrences, and populate extras list
        for(int x : arr1) {
            if(counts.containsKey(x)) {
                counts.put(x, counts.get(x) + 1);
            } else {
                extras.add(x);
            }
        }

        // write c copies of each x, in order from arr2
        int i = 0;
        for(int x : arr2) {
            int c = counts.get(x);
            for(int j = 0; j < c; ++j) {
                arr1[i++] = x;
            }
        }

        // write the extras
        for(int x : extras) {
            arr1[i++] = x;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多