本文分享在AI刷题的过程中,借助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%位置的数据输出就可以了。考察的就是排序算法。
完整代码
import java.util.Arrays;
public class Main {
public static int solution(String data) {
String[] strings = data.split(",");
int[] nums = new int[strings.length];
for (int i = 0; i < strings.length; i++) {
nums[i] = Integer.parseInt(strings[i]);
}
Arrays.sort(nums);
return nums[(int) (nums.length * 0.8 + 0.5) - 1];
}
public static void main(String[] args) {
// You can add more test cases here
System.out.println(solution("10,1,9,2,8,3,7,4,6,5") == 8);
System.out.println(solution("1,0,8,7,3,9,12,6,4,15,17,2,14,5,10,11,19,13,16,18") == 15);
System.out.println(solution(
"76,100,5,99,16,45,18,3,81,65,102,98,36,4,2,7,22,66,112,97,68,82,37,90,61,73,107,104,79,14,52,83,27,35,93,21,118,120,33,6,19,85,49,44,69,53,67,110,47,91,17,55,80,78,119,15,11,70,103,32,9,40,114,26,25,87,74,1,30,54,38,50,8,34,28,20,24,105,106,31,92,59,116,42,111,57,95,115,96,108,10,89,23,62,29,109,56,58,63,41,77,84,64,75,72,117,101,60,48,94,46,39,43,88,12,113,13,51,86,71") == 96);
}
}
AI刷题过程
在刷题过程中,更重要的是对算法的学习,因此在写这一题时,我们可以顺便对算法中的常见排序算法进行学习和复现,而AI刷题的优势就体现在这里。
常见的排序算法包括:
- 冒泡排序
- 快速排序
- 直接插入排序
- 归并排序
- 选择排序
- 堆排序
可以看到AI的自动生成注释功能能够直接将常见的算法列出来。我们尝试复现每一种算法。
冒泡排序
只需要写一个冒泡排序的注释,MarCode就能自动帮助我们生成冒泡排序的代码。
快速排序
快速排序是一种高效的排序算法,它使用分治策略来对一个数组进行排序。写一个快速排序的注释,即使是快速排序的递归函数也能自动生成,并且没有报错。
如果代码有不理解的地方,直接点击左侧的Marcode解读器,右侧就能给出程序的详细解读。
堆排序
除了代码中自动生成,右侧MarsCode AI也可以根据我们的要求帮助讲解算法和生成代码。
总结
通过刷题学习算法是最直接最有效的方式,通过利用MarsCode AI可以帮助我们迅速总结问题的考察的知识点和涵盖的算法。利用AI模型可以很便捷的复现算法,帮助我们理解一些抽象的算法过程。可以看出AI刷题的优势之处,很大程度上提高了自己的学习效率。