文章
986
粉丝
5
获赞
20
访问
247.9k

评分及理由
(1)得分及理由(满分4分)
学生给出的基本设计思想是:从右向左遍历,维护当前已遍历部分的最小值(min_Val)和最大值(max_Val),对于每个A[i],计算其与min_Val和max_Val的绝对差,取较小者作为res[i],然后更新min_Val和max_Val。这个思路是错误的,因为对于A[i],其与后续元素的最小绝对差不一定出现在最小值或最大值上。例如,A = [5, 8, 4, 10],对于A[0]=5,后续元素为[8,4,10],最小绝对差是|5-4|=1,但最小值是4,最大值是10,算法会计算min(|5-4|, |5-10|)=1,这恰好正确,但换个例子A=[100, 1, 2, 3],对于A[0]=100,后续元素[1,2,3],最小绝对差是|100-3|=97,但最小值是1,最大值是3,算法会计算min(|100-1|, |100-3|)=97,也正确,但这只是巧合。实际上,如果后续元素分布更复杂,比如A=[10, 20, 15, 30],对于A[0]=10,后续[20,15,30],最小绝对差是|10-15|=5,但最小值是15,最大值是30,算法计算min(|10-15|, |10-30|)=5,正确;但若A=[10, 12, 18, 15],对于A[0]=10,后续[12,18,15],最小绝对差是|10-12|=2,最小值是12,最大值是18,算法计算min(|10-12|, |10-18|)=2,正确。然而,这个算法本质上是错误的,因为它假设最小绝对差一定出现在当前后续元素的最小值或最大值上,但实际可能出现在中间某个值上。例如,A=[0, 5, 3, 7],对于A[0]=0,后续[5,3,7],最小绝对差是|0-3|=3,最小值是3,最大值是7,算法计算min(|0-3|, |0-7|)=3,正确;但若A=[0, 5, 8, 6],对于A[0]=0,后续[5,8,6],最小绝对差是|0-5|=5,最小值是5,最大值是8,算法计算min(|0-5|, |0-8|)=5,正确。虽然这些例子都碰巧正确,但我们可以构造反例:A=[50, 55, 52, 58],对于A[0]=50,后续[55,52,58],最小绝对差是|50-52|=2,最小值是52,最大值是58,算法计算min(|50-52|, |50-58|)...
登录后发布评论
暂无评论,来抢沙发