免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 天魔封神霸
打印 上一主题 下一主题

【华为公司Python面试题】,要求10分钟写出代码。。。 [复制链接]

论坛徽章:
0
81 [报告]
发表于 2012-10-11 10:17 |只看该作者
回复 80# Hadron74

我看了一下. 好象是一样.呵呵.看来不过关了

   

论坛徽章:
0
82 [报告]
发表于 2013-03-01 11:59 |只看该作者
本帖最后由 xinxinhao 于 2013-03-01 12:01 编辑

回复 1# 天魔封神霸


这个问题很简单吧 ,技巧即可,求相差最小,先求最大,再反过来不就是最小咯 ?

最小的意思是 (所有最小的和) 减去 (所有最大的和)  === 相差结果 最小了

(最小 当然可是是负数啊)


a=[1,45435,54,67,545]
b=[54,656,76576,2,54]

c=a+b
c=c.sort()

a=c[0:len(a)]
b=c[len(a):]

此时 和相差最小

====完了,就这么简单=====

论坛徽章:
12
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2018-03-16 10:24:0515-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之北京
日期:2019-08-13 17:30:53
83 [报告]
发表于 2013-03-01 21:55 |只看该作者
opengl用户路过

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
84 [报告]
发表于 2013-03-07 09:57 |只看该作者
webdna 发表于 2012-09-27 03:30
就华为两个字,引无数人看这个帖
不算广告吧

论坛徽章:
0
85 [报告]
发表于 2013-03-22 15:35 |只看该作者
a[1,5,3,9,2]
b[0,7,8,4,6]
c=[1,5,3,9,2,0,7,8,4,6]
c=[0123456789]
a   b
0   9
8   1
7   2
3   6
4   5
这样?

论坛徽章:
0
86 [报告]
发表于 2013-03-25 10:53 |只看该作者
假设a=[5,4,8,6,10] b=[15,13,10,18,20]
(1)将两个序列合并为一个序列,并且排序.得到序列[4,5,6,8,10,10,13,15,18,20]。
(2)在将该序列切分为((4,5),(6,,(10,10),(13,15),(18,20))。
(3)按照大小交替分配,假设A第一次去小的数也就是4,那么下一次它将取打的数也就是8.这样依次交替着取。
(4)最后取得a,b序列a=[4,8,10,15,18], b=[5,6,10,13,20],最后两序列之差为1。
不知这种想法对不对。

论坛徽章:
0
87 [报告]
发表于 2013-03-25 19:42 |只看该作者
代码贴出来:
  1. def cross(a, b):
  2.         temp = a + b
  3.         temp.sort()
  4.         i = j = k = 0
  5.         for n in range(0, len(temp), 2):
  6.                 if k%2 == 0:
  7.                         a[i] = temp[n]
  8.                         b[j] = temp[n+1]
  9.                 else:
  10.                         a[i] = temp[n+1]
  11.                         b[j] = temp[n]
  12.                 i = i + 1
  13.                 j = j + 1
  14.                 k = k + 1
  15. def sum(a):
  16.         s = 0
  17.         for i in a:
  18.                 s = s + a
  19.         return s
  20. a = [5, 4, 8, 6, 10]
  21. b = [15, 13, 10, 18, 20]
  22. cross(a, b)
  23. print sum(a) - sum(b)
复制代码

论坛徽章:
0
88 [报告]
发表于 2013-11-07 20:35 |只看该作者
回复 82# xinxinhao


    擦,我理解错了,简单问题复杂化。
我是把a和b两个列表合二为一成c,sort,reverse,然后把a和b清零,从c里从大到小往a和b两遍分配,每次用一个求和函数看那边儿小就往那边儿加,保证两串和的差别最小。不过原题说的是“交换两串元素”,也就是说两串的长度都是不变的

那我倒叙了之后按照大小一边儿一个就行了吧?

论坛徽章:
0
89 [报告]
发表于 2013-11-07 20:38 |只看该作者
回复 82# xinxinhao


    你这个结果不能保证是两个串互相“交换”元素能得到的结果吧……

论坛徽章:
0
90 [报告]
发表于 2013-11-07 20:49 |只看该作者
回复 40# tangboyun


    我怎么觉得这个答案是错的,37楼的那个才是对的呢?因为原题的前提是“交换两个串里的元素”,而您这个算法其实把原来两个列表里头的元素彻底打乱了,得出来的不一定是能够通过“交换元素”得到的结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP