关注
楼主思路是对的,但是写得复杂了,关键就是现有余数r和新的余数a[i] % N合并这步,可以直接判断相加后是否大于N,因为r和a[i] % N的范围都是左闭右开区间[0, N),因此N-r和a[i] % N的范围也是[0, N),比较大小即可。 int get_average(int a[], int n) {
int aver = 0;
int rest = 0; // [0, n)
for (int i = 0; i < n; ++i) {
aver += a[i] / n;
int temp = a[i] % n;
if (temp < 0) {
temp += n;
aver -= 1;
}
if (rest > n - temp) { // rest + temp > n,防止溢出
aver++;
rest -= (n - temp);
} else {
rest += temp;
}
}
return (aver >= 0) ? aver : aver + 1; // 假定负数结果向0取整
}
思路参考Quora上的问答,但是原***括楼主的做法都有一点没考虑到,那就是负数是否向0取整的问题。比如-25 / 9和-25 % 9的值,在C/C++/Java这种语言中,结果分别是-2和-7,而在中间处理时,合适的结果应该是-3和2,否则会出问题。比如楼主的程序对{-10, 3, 9}结果是1,对{-10, 3, 8}结果是0,对{-10, 3, 7}的结果是-1。原答案的程序对{-10, 3, 9}结果是1,对{-10, 3, 8}结果是0,对{-10, 3, 7}的结果是0。但如果最后结果需要负数向0取整的话,还要再判断结果是否为负数,若为负数,则需要加1。 另外,对于输入是数据流而非固定数组的情况,稍微就有点麻烦。设x(k)和r(k)依次是数组a[1..k](为方便,下标从1开始)的平均值(取整)和余数。那么有 x(k+1) = (k * x(k) + r(k) + a[k+1]) / (k+1)
= x(k) + (r(k) + a[k+1] - x(k)) / (k+1)
r(k+1) = (r(k) + a[k+1] - x(k)) % (k+1)
关键就是在不溢出的情况下求(r(k) + a[k+1] - x(k)) / (k+1),相当于求大小为3的数组{r(k), a[k+1], -x(k)}的加权平均值,不过权重不是1/3而是1/(k+1)。看似如此,实际上-x(k)可能溢出,因为INT_MAX的绝对值比INT_MIN的绝对值小1,所以x(k)是INT_MIN即0x80000000的时候,-x(k)仍然是0x80000000,溢出。至于数据流特别大,也就是说元素数量k超过了int的范围的话,考虑就更为复杂了。综上,这个问题其实……仔细想下其实没那么简单……不知道楼上说归并的是个什么思路……
查看原帖
点赞 1
相关推荐
查看22道真题和解析 点赞 评论 收藏
分享
刷牛客的我很豁达:包银行的兄弟,如果你想卷那就途虎,但是途虎也不是啥好平台,跳槽可能有压力,至于证券算了吧,等湾湾回来或者美元爆炸,证券类不裁员就见鬼了,更何况是本来就末尾淘汰。综上卷就去途虎,不卷就银行
点赞 评论 收藏
分享
10-23 15:58
华中农业大学 Java
LZStarV:冲就好了,就算真的是字节也冲,面评脏了大不了等三四个月就淡了,而且等到那个时候实力进步了选择还多,何必拘泥于字节 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的秋招白月光和意难平公司 #
26548次浏览 218人参与
# 机械制造面试点评 #
77520次浏览 463人参与
# 你想跟着什么样领导? #
18260次浏览 163人参与
# 机械人晒出你的简历 #
141124次浏览 865人参与
# 十一月总结 #
31384次浏览 282人参与
# 职场上哪些事情令人讨厌 #
29288次浏览 118人参与
# 机械/制造每日一题 #
77139次浏览 1390人参与
# 分享一个让你热爱工作的瞬间 #
50564次浏览 440人参与
# 扒一扒那些奇葩实习经历 #
134431次浏览 1129人参与
# 毕业季,你想好怎么跟生活对线了吗? #
258706次浏览 3844人参与
# 运营人的第一份offer应该如何选 #
198177次浏览 1225人参与
# 深信服求职进展汇总 #
239458次浏览 1803人参与
# 机械人还在等华为开奖吗? #
284453次浏览 1447人参与
# 什么样的背景能拿SSP? #
121873次浏览 421人参与
# 如何提高实习转正率? #
59637次浏览 417人参与
# 从夯到拉,评价编程语言 #
14450次浏览 110人参与
# 硬件人秋招进展 #
252889次浏览 3942人参与
# 国央企笔面经互助 #
169390次浏览 1207人参与
# 考研失败就一定是坏事吗? #
154839次浏览 1091人参与
# 应届生进小公司有什么影响吗 #
103455次浏览 1092人参与