视频推荐的算法——题解:

99 阅读1分钟

题目地址:视频推荐的算法 - MarsCode

问题描述

西瓜视频正在开发一个新功能,旨在将访问量达到 80 百分位数以上的视频展示在首页的推荐列表中。实现一个程序,计算给定数据中的 80 百分位数。
例如:假设有一个包含从 1 到 100 的整数数组,80 百分位数的值为 80,因为按升序排列后,第 80% 位置的数字就是 80。
99 百分位数:假如有 N 个数据,将数据从小到大排列,99 百分位数是第 N99% 位置处的数据(遇到小数时四舍五入获取整数)。一般计算逻辑是先排序,定位到 N99% 的位置,返回该位置处的数据。同理,80 百分位数就是第 N*80% 位置处的数据。

测试样例

样例 1:

输入: data = "10,1,9,2,8,3,7,4,6,5" 输出: 8

样例 2:

输入: data = "1,0,8,7,3,9,12,6,4,15,17,2,14,5,10,11,19,13,16,18" 输出: 15

样例 3:

输入: data = "5,3,9,1,7" 输出: 7

思路解析:

这道题其实非常简单,就是找到一组数据中的80百分位数,同时注意一些四舍五入的小细节,以及Java函数的使用。

题解代码:

public static int solution(String data) {
        int i = 0;
        int j = 0;
        int[] n = new int[data.length()];

        while (i < data.length()) {
            int num = 0;
            while (i < data.length() && data.charAt(i)!= ',') {
                num = num * 10 + (data.charAt(i) - '0');
                i++;
            }
            n[j++] = num;
            i++;
        }

        int[] sortedN = new int[j];
        System.arraycopy(n, 0, sortedN, 0, j);//Java排序函数是排全部,因此复制一个
        java.util.Arrays.sort(sortedN);

        int index = (int) (j * 0.8 + 0.5);//四舍五入
        return sortedN[index - 1];
    }