Re: [讨论] 面试遇到的考题

楼主: johnlinvc (阿翔)   2014-07-03 23:14:38
※ 引述《ck574b027 (荒围!定厝!贼!妹!)》之铭言:
: ※ 引述《pika0923 (宜安)》之铭言:
: : 想了一个作法 开两个阵列存 "含有这个位子及以左的最大值和最小值"
: : 叫他amax和amin好了
: : 由于这题目一定是整数 在这里绝对值要变大就要一路乘下去 不然就不乘(0的状况)
: : 所以 amax[x]会是 ar[x], ar[x]*amax[x-1], ar[x]*amin[x-1]三者之一
: : 同理 amin[x]也会出现在其中
: : 而所求的区段一定有个结尾 也一定被某个amax[x]算到 所以最后求amax的最大值即可
: 这个除了直观、O(n)之外,还可以顺便算最小值,于是我用 scala 写一个递回版本。
: 假设题目一定要连续相乘,单一数字不算,长度 1 以下回传 Nil
: https://gist.github.com/bendwarn/4b69495194fb047b978e
Haskell 的 一行文
mulMax = maximum . fst . foldl
(\(maxs@(max:_), mins@(min:_)) x ->
((maximum $ map (*x) [1,min,max]) : maxs,
(minimum $ map (*x) [1,min,max]) : mins)) ([0],[0])
mulMax [2 , -7 , 0 , 2 , 3 , 8 , -6 , 5] # 48
作者: lovdkkkk (dk)   2014-07-03 23:17:00
ancient power XD
作者: frouscy (流浪吧。)   2014-07-04 17:26:00
ancient power!

Links booklink

Contact Us: admin [ a t ] ucptt.com