当前位置: 首页 > 面试题库 >

根据出现次数的升序对数组排序

党建义
2023-03-14
问题内容

如何在Java中根据该值的出现次数以升序排列数组中的元素。

这是我尝试过的:

int a[]={0,0,0,1,3,3,2,1,3,5,6,0};
int b=a.length;
for(int i=0;i<b;i++) {
    for(int j=0;j<i;j++) {
        int temp;
        if( a[j]>a[i]) {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
}

for(int r=0;r<a.length;r++) {
    System.out.println(a[r]);
}

问题答案:

这是一种开始的方法,可以基于以下想法:对映射中初始数组中每个整数发生的次数进行计数。计算完所有数字后,请按升序对地图进行排序,然后打印地图的输出:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;

public class SortCount {
    public static void main(String[] args) {
        int nums[] = {0,0,0,1,3,3,2,1,3,5,6,0};
        HashMap<Integer,Integer> counts = new HashMap<Integer,Integer>();

        for(int i = 0; i < nums.length; i++) {
            if(counts.containsKey(nums[
                Integer c = counts.get(nums[i]) + 1;
                counts.put(nums[i], c);
            }
            else {
                counts.put(nums[i],1);
            }
        }

        ValueComparator<Integer,Integer> bvc = new ValueComparator<Integer,Integer>(counts);
        TreeMap<Integer,Integer> sortedMap = new TreeMap<Integer,Integer>(bvc);
        sortedMap.putAll(counts);

        ArrayList<Integer> output = new ArrayList<Integer>();
        for(Integer i : sortedMap.keySet()) {
            for(int c = 0; c < sortedMap.get(i); c++) {
                output.add(i);
            }
        }

        System.out.println(output.toString());
    }
}

它使用一个Comparator类来比较中的值Map

import java.util.Comparator;
import java.util.Map;

public class ValueComparator<T1,T2 extends Comparable<T2>> implements Comparator<T1> {
    Map<T1,T2> base;
    public ValueComparator(Map<T1,T2> base) {
        this.base = base;
    }

    @Override
    public int compare(T1 k1, T1 k2) {
        T2 val1 = base.get(k1);
        T2 val2 = base.get(k2);

        return val1.compareTo(val2);
    }
}


 类似资料:
  • NowCoder 题目描述 // html Input: nums = 1, 2, 3, 3, 3, 3, 4, 6 K = 3 Output: 4 解题思路 // java public int GetNumberOfK(int[] nums, int K) { int first = binarySearch(nums, K); int last = binarySearc

  • 一、题目 统计一个数字:在排序数组中出现的次数。 举例说明 例如输入排序数组{ 1, 2, 3, 3, 3, 3, 4, 5}和数字3 ,由于3 在这个数组中出现了4 次,因此输出4 。 二、解题思路 利用改进的二分算法。 如何用二分查找算法在数组中找到第一个k,二分查找算法总是先拿数组中间的数字和k作比较。如果中间的数字比k大,那么k只有可能出现在数组的前半段,下一轮我们只在数组的前半段查找就可

  • 我试图根据一个数组的升序对多个数组进行排序。以下是示例: 现在,在按升序排列数组“a”之后,我想对其他数组进行排序。输出应如下所示: 按升序排列很好。但是,我无法对其他数组进行排序。我想创建一个函数,在我的主函数中使用它。很高兴听到一些建议。 我看过下面的帖子,但没有帮助我。 在C #中基于一个数组对另一个数组排序 以下是我尝试过的代码: 我可以知道我是否遗漏了什么或者做了什么完全错误的事情吗?

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 在 Java 中,如何根据另一个排序数组的索引顺序对数组进行排序?例如,如果我有: 我按升序对 arr2 进行排序 我希望另一个是: 我怎么能做到这是Java?我知道我会保存新的排序数组到新的实例。任何帮助,谢谢!

  • 假设我有两个NumPy数组 我希望根据中的值,将数组有效地拆分为子数组。 我想要的输出是 假设以零开始并按升序排序,那么最有效的方法是什么? 注意:这个问题是这个问题的排序版本:根据另一个数组的值(未排序,而是分组)将NumPy数组拆分为子数组