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

楼主: lovdkkkk (dk)   2014-07-12 06:16:54
※ 引述《changyuheng (张昱珩)》之铭言:
: 加码一题:
: 给任一有限长度整数数列,
: 求以特定方法取出其中数字加总所能获得的极大值。
: 取法条件限制:
: 最多连续取 2 个数,亦即不得连续取 3 个数。
: 例:
: 2, 1, 9, 5, 2, 0, 1, 3, 4
: 可以下列方法取出数字:
: 1) 2, 1, 5, 2, 1, 3
: 2) 2, 1, 2, 0, 4
: 不可以下列方法取出数字:
: 1) 2, 1, 9, 2, 0, 3, 4
看不太出来这题是要考什么 @@
好像就直接算而已。
// 喝完一瓶红酒刚睡醒头有点痛的烂 code
// c style, 可能不能跑...XD
int[] arr = {/* 管它是什么 */};
int[] pos = {0, 0}, mpos = {0, 0};
int i, j, max, curr;
// 需要的话这里先判断 arr 是不是空的
max = arr[0];
for (i = 0; i < arr.length; i++) {
curr = arr[i]; // 直接改掉 curr 跟 pos
pos[0] = pos[1] = i;
if (curr > 0) { // 目前数为正才考虑要不要加上下一个
j = i+1;
if (j < arr.length // 后一个不为正就忽略
&& arr[j] > 0) // 不然就给它加下去
curr += arr[j];
pos[1] = j;
}
}
if (curr > max) { // 比大小, 更新
mpos[0] = pos[0];
mpos[1] = pos[1];
max = curr;
}
}
作者: robler (章鱼丸)   2014-07-12 10:05:00
明明就有程式板可以讨论..
楼主: lovdkkkk (dk)   2014-07-12 12:52:00
推楼上 XD
作者: summerleaves (内湖全联先生)   2014-07-12 15:32:00
Programming
作者: changyuheng (张昱珩)   2014-07-12 15:51:00
因为也是面试题,所以才 po
楼主: lovdkkkk (dk)   2014-07-12 17:15:00
真的是面试题 @@ 不知有没有什么特别的解...
作者: PUTOUCHANG (自己的废文自己发)   2014-07-12 19:14:00
很简单啊, PO 到 programming 板或 stackoverflow 问
作者: pika0923 (宜安)   2014-07-12 20:06:00
其实是Prob_Solve版的业务 那边有很多好玩的面试题是说以这篇来说我的作法似乎对题目的解读错误?以为说可以取超过一个区段 每段长度最大2这篇好像是作单一区段?
楼主: lovdkkkk (dk)   2014-07-12 23:09:00
嗯嗯, 原题有说连续, 举的能取的例子也都是连续的
作者: pika0923 (宜安)   2014-07-12 23:18:00
是说这样2,1的区段还要拿两个例子来讲还蛮特别的XD
作者: changyuheng (张昱珩)   2014-07-13 00:54:00
抱歉是我不够仔细,题意是多个区段加总。与讨论串原题属于同样的算法也同是面试题 (年薪一百上下,当时是要求当场口头回答)。解答根据前同事所教,在取每一个数时,都考虑不取的答案、和取了属于区段第一和第二个数的的答案,即可透过带着三个数 O(n) 求得。
楼主: lovdkkkk (dk)   2014-07-13 03:25:00
看到修改后的了, 那 "多个" 有限制几个吗? 看举例都是三个区段 @@啊, 不过几个区段差距应该不大, 解法一样
作者: changyuheng (张昱珩)   2014-07-13 10:37:00
不限区段数目,取法只要符合条件即可。
作者: pika0923 (宜安)   2014-07-13 12:25:00
带三个数的话应该就我那个作法拔掉b00这样
作者: changyuheng (张昱珩)   2014-07-13 12:56:00
楼上确实是 O(n) DP 解!
楼主: lovdkkkk (dk)   2014-07-13 15:37:00
结果我是搞错题意, 还觉得怎么那么简单...XDrz

Links booklink

Contact Us: admin [ a t ] ucptt.com