【华为OD】C卷真题 100%通过:查找众数及中位数 Java代码实现[思路+代码]

JS代码实现:

【华为OD】C卷真题 100%通过:查找众数及中位数 JS代码实现[思路+代码]-CSDN博客

 C语言代码实现:

【华为OD】C卷真题 100%通过:查找众数及中位数 C语言代码实现[思路+代码]-CSDN博客

 C++代码实现:

【华为OD】C卷真题 100%通过:查找众数及中位数 C/C++代码实现[思路+代码]-CSDN博客

题目描述:

1.众数是指一组数据中出现次数量多的那个数,众数可以是多个

2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数

3.查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数

输入描述

输入一个一维整型数组,数组大小取值范围 0

输出描述

输出众数组成的新数组的中位数

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

10 11 21 19 21 17 21 16 21 18 15

输出

21

示例2

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4

输出

3

示例3

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

5 1 5 3 5 2 5 5 7 6 7 3 7 11 7 55 7 9 98 9 17 9 15 9 9 1 39

输出

7

     986                                                         
                                                            
              +---+                                                          
  3            |   |       ++                               +       +---|   
  |           |   | 3      +                6               +  |   +   |        +
  |      +     |   |       +         +                      +    |  +   |       +
  |      +    |   +---+    +        +        +++++          +   |  +   |        +
  |      +    | +      |   +   +----+        |   |          +   |  +   |        +
  |      +  3 | +      |   +   +    +      2 |   |     2    +   |  +   |        +
  |      +    | +      |   +   +    +        |   |          +   |  +   |        +
  |      +---+ |     |    |  |    +    ----+   |   +---+    |  |  +   |         +
  |      |     |     |    |  |    +    |       |   |   |    |  |  +   |         +
  |    1 |     |     | 8  |  |    +  1 |   |    | 1 |   | 1 |   |  +   |        +
  |      |     |     |    |  |    +    |   |    |   |   |   |   |  +   |        +
  |  +---+     |     +---+   |    ++---+    ++   +---+   +---+   |  +   |        +
  |  |         |         |   |    |         ++              |   |  |+   |        +
  |0 |         |         | 0 |  0 |         ++              | 0 |  |+   |        +
  |  |         |         |   |    |         ++              |   |  |+   |        +
  +---+         +          +-------+                       +---+| +|+   |        +
                +                                                    +   |        +
    0   1   2   3   4   5   6   7   8   9  10  11  12 + v:    w  u m    u 1 0 2 4
 

题目解析:

        先对数组中的每个数值次数进行统计,可以使用map,接着找到最大次数,然后这个次数来找对应的值,求中位数即可

代码实现:

import java.util.Scanner;

public class Main {
    public static int getMidNum(int[] nums, int lens) {
        int[] nCnts = new int[1001];
        int mv = 0;
        int[] ans = new int[1001];
        int ansIndex = 0;

        for (int i = 0; i < lens; i++) {
            nCnts[nums[i]]++;
            if (mv < nCnts[nums[i]]) {
                mv = nCnts[nums[i]];
            }
        }

        for (int i = 0; i < 1001; i++) {
            if (nCnts[i] == mv) {
                ans[ansIndex] = i;
                ansIndex++;
            }
        }

        int len = ansIndex;
        if (len % 2 == 0) {
            return (ans[len / 2] + ans[len / 2 - 1]) / 2;
        }

        return ans[len / 2];
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr = new int[1001];
        int tmp;
        int size = 0;
        while (scanner.hasNextInt()) {
            tmp = scanner.nextInt();
            arr[size] = tmp;
            size++;
        }
        System.out.println(getMidNum(arr, size));
    }
}

【华为OD】C卷真题 100%通过:查找众数及中位数 Java代码实现[思路+代码]_第1张图片

你可能感兴趣的:(杂谈,java,华为od,c语言,javascript,python,开发语言,C++)