题目地址:视频推荐的算法 - 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];
}