阿里巴巴2013笔试最后一题解答
来源:互联网 发布:js apply的z作用 编辑:程序博客网 时间:2024/05/17 22:18
题目描述:一个淘宝金冠卖家有n个仓库,每个仓库存储量不同,他想通过搬运使得所有仓库存储量相等,n个仓库形成环状,搬运只在相邻仓库间发生,请设计高效算法达到卖家的目的,并且使得总搬运量最低。
分析:设每个仓库库存为a[i],第i个仓库搬给其右边的仓库x[i]个。m为最后每个仓库库存。可有方程
m = a1 - x1 + x2
= a2 - x2 + x3
=﹉
= an - xn + x1
x2 = m - a1 + x1 = x1 - c1
x3 = m - a2 + x2 = x1 - c1 + m - a2 = x1 - c2
x4 = x1 - c4
…
xn = x1 - cn
问题为求出x数组使得所有元素之和最小,只要求出x1即可。ci为已知,所以问题可转化为数轴上n个点ci,求出一点使得其到各个点的距离之和最短。可以证明所有点的中间点即为最解。简单证明如下:
设最解点为k,如果k不是最中间点,则必然其两边有的点数不同,不妨设右边点数多于左边,为了更具体,不妨设左边有2个点,右边有3个点,现在使k向右移动d个单位,则左边所有点到k的总距离将增加2d个单位,而右边减少3d个单位,总距离减少d个单位,显然k不是最优解,当k右移至中间点时,此时无论左移或右移都会增加总距离,故中间点为最优解。
以上证明并不严谨,但足以说明最优解。
程序如下
时间复杂度o(nlogn).,若有朋友发现错误,欢迎指正,共同学习。
分析:设每个仓库库存为a[i],第i个仓库搬给其右边的仓库x[i]个。m为最后每个仓库库存。可有方程
m = a1 - x1 + x2
= a2 - x2 + x3
=﹉
= an - xn + x1
x2 = m - a1 + x1 = x1 - c1
x3 = m - a2 + x2 = x1 - c1 + m - a2 = x1 - c2
x4 = x1 - c4
…
xn = x1 - cn
问题为求出x数组使得所有元素之和最小,只要求出x1即可。ci为已知,所以问题可转化为数轴上n个点ci,求出一点使得其到各个点的距离之和最短。可以证明所有点的中间点即为最解。简单证明如下:
设最解点为k,如果k不是最中间点,则必然其两边有的点数不同,不妨设右边点数多于左边,为了更具体,不妨设左边有2个点,右边有3个点,现在使k向右移动d个单位,则左边所有点到k的总距离将增加2d个单位,而右边减少3d个单位,总距离减少d个单位,显然k不是最优解,当k右移至中间点时,此时无论左移或右移都会增加总距离,故中间点为最优解。
以上证明并不严谨,但足以说明最优解。
程序如下
int foo(int a[]){for(i : 0——n)sum += ai;m= sum / n;c0=a1 - m;for(i:1——n)ci = c[i-1] + ai - m;sort(c, c+n);x0 = c[n/2];sum = x0;for(i:1——n){xi = x0 - ci;sum += xi;}return sum;}
时间复杂度o(nlogn).,若有朋友发现错误,欢迎指正,共同学习。
- 阿里巴巴2013笔试最后一题解答
- 阿里巴巴2013年9月14日笔试题最后一题(Java部分上一题)
- 网易2016Java实习生笔试题最后一题题解
- 阿里巴巴笔试题解(1)
- 阿里笔试题解答(一)
- 阿里巴巴2013笔试题
- 阿里巴巴笔试题2013
- 阿里巴巴2013笔试题
- 阿里巴巴2013笔试
- 阿里巴巴2013笔试题
- 2013阿里巴巴笔试题选解
- 2013阿里巴巴实习生笔试
- 2013阿里巴巴实习生笔试
- 阿里巴巴2013笔试题 最后大题的分析(网络资料整理)
- 2013阿里巴巴实习笔试题 最后两题 明星问题+仓库运货
- 阿里巴巴2013实习生笔试题一算法题详解
- 2008下半年软件设计师下午考试最后一题解答
- 谷歌2007年上交大考试最后一题解答
- POJ 1088 滑雪(DP+记忆化搜索)
- Sitemesh 自定义decorators.xml 文件路径
- office word 每页头上的这个字怎么删除不掉.?怎么更改里面的字!
- Java OutOfMemory Error引发的JVM参数实测--线程堆栈参数篇
- asp返回上一页
- 阿里巴巴2013笔试最后一题解答
- 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计
- mfc 序列化类(串行化类)的继承和虚函数应用
- 暗时间 笔记
- How I Made Porn 20x More Efficient with Python
- AOP 之 6.7 通知顺序 ——跟我学spring3
- Oracle E-Business Suite Upgrade Documents
- Source Code of a B Tree
- android启动之init进程详解