每个软件工程师都应该在 1 个小时内解决的 5 个编程问题 [悲剧版]

2015-05-09 14:08:23 +08:00
 jacob

最近很火的讨论,简单整理了一些: http://segmentfault.com/a/1190000002746474

5508 次点击
所在节点    分享发现
56 条回复
batman2010
2015-05-09 17:31:58 +08:00
@batman2010 s/定/写
Valyrian
2015-05-09 17:40:51 +08:00
对于学过算法的,这些题太简单了。只能说搞软件工程的,其实并不涉及复杂的算法。。
lvfujun
2015-05-09 17:46:08 +08:00
@zsx 都怪php太聪明要不一样可以这么短.
lvfujun
2015-05-09 17:46:30 +08:00
@zsx @错了sorry!
lvfujun
2015-05-09 17:46:53 +08:00
@9hills 都怪php太聪明要不一样可以这么短.
theoractice
2015-05-09 17:47:24 +08:00
我觉得q4正确的方法应该是把所有的数分别用其个位数字补齐到位数相同,然后直接排序。
比如45,4386,23,3,9,4补成4555,4386,2333,3333,9999,4444
按排序结果就是9 45 4 4386 3 23
lvfujun
2015-05-09 17:53:08 +08:00
@raincious php太聪明了+1
@9hills [phpCode] $a = ['"50"','"2"','"1"','"9"'];rsort($a);print_r($a);[/phpCode]
lvfujun
2015-05-09 17:58:40 +08:00
js

[50,2,1,9].sort().reverse().join("");
"95021"
zsx
2015-05-09 18:02:15 +08:00
@lvfujun 然后根据楼上的回复发现其实这个解法是错的_(:з」∠)_
theoractice
2015-05-09 18:10:41 +08:00
我也错了,50和500这种情况无法分辨。不过属于边界情况,单独处理一下也行
raincious
2015-05-09 18:13:11 +08:00
@lvfujun

你上面的解法其实就是强制PHP将值视为字符串。类似于:

<?php

$a = ['50', '2', '1', '9'];
$b = [];

foreach ($a as $aa) {
$b[] = $aa . '-'; // 在最后加一个非数字的字符
}

rsort($b);

var_dump(
(int)implode('', explode('-', implode('', $b)))
);

但是直接的字符串比较或许……不是解法,因为这样无法避免50500变50050的问题。

拆开再比就没这样的问题了,就像这样:

1
2
5 - 0
5 - 0 - 0
9

(我错了,这其实……是向量组,不是树)

但是貌似不是很优雅。
raincious
2015-05-09 18:15:03 +08:00
@raincious 我又错了,应该最终排序是这样

1
2
5 - 0 - 0
5 - 0
9
lvfujun
2015-05-09 18:27:51 +08:00
@raincious 原理很简单其实当很多编程语言里面自带的sort里面如果判断不是number 就按字符ascii码排序.其实这样的解法不是很"准”.
9hills
2015-05-09 18:36:08 +08:00
@raincious
@xjx0524 恩,这个有个bug,可以补一个compare函数,比如 @theoractice 说的那个办法

a=[56,50,5]
max_l = max(map(len, map(str, a)))
print int("".join(sorted(map(str,a), reverse=True, key=lambda i:i.rjust(max_l, i[-1]))))
56550
wdhwg001
2015-05-09 18:37:10 +08:00
@theoractice 不用单独处理,改排序函数也行。
9hills
2015-05-09 18:39:18 +08:00
@9hills
@theoractice 想了想不对。。50和501这种其实也是。。50应该比501要大

所以还是自己实现一个compare吧,就是丑了点,Python得七八行
raincious
2015-05-09 18:44:41 +08:00
@9hills

楼主心中默想:“嗯,终于,大家发现了这么简单的问题也是有坑的,那么,我也安心了。”

于是楼主微笑着,推开了大门走了出去,消失在一片灿烂的阳光中,深藏功与名……
9hills
2015-05-09 18:45:30 +08:00
http://www.v2ex.com/t/189756

这个tip好像以前见过「cmp=lambda x, y: int(x + y) - int(y + x)」,还是自己弱。。<_<
qwsqwa
2015-05-09 19:17:01 +08:00
搞过ACM的表示第四题重写一个比较函数就好。
gelupk
2015-05-09 19:26:35 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189719

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX