面试笔试做不出长整数加法的是不是 coding 能力就基本当没有了?

2020-08-20 11:02:09 +08:00
 phpfpm

最近面试,按说候选人背景也都不错吧。

我们对算法要求没那么高,业务代码为主。

因此对于各种语言的候选人,我基本都会问一道长整数加法的问题。

俩数相加,都没有符号 /没有小数点 /字符串表示 返回和 /用字符串表示

这题难吗?

考察的知识点点挺广的:

字符串 /数组操作,循环控制,流程逻辑,边界条件等等。

这也基本上是编程的时候经常能遇到的问题。

但是我遇到的面试者写的千奇百怪的都有:

等等吧

所以如果你遇到这个题,如何优雅的写一个 a+b?

稍后我写一个我自己花了一小点时间写的答案,八行,没有很过分的压缩代码 我的代码大概长这样:

function add(a, b) {
    let ...
    some magic {
    	cast something
        cast other
    }
    return ...
}

正经逻辑三四行写完,晚一些我贴条的方式公布我的答案。

如果要你写,你写啥?

23046 次点击
所在节点    程序员
321 条回复
dartabe
2020-08-20 12:58:28 +08:00
确实是 leetcode 里面 easy 题里面都算简单的
phpfpm
2020-08-20 13:05:41 +08:00
@murmur 54 楼。
一个问题没有开原算法不是还得手写。
@dartabe
@sampeng

而且我喜欢这道题的原因是,面试的时候不用贴题目,一句话说得清楚,节约彼此时间。
672795574
2020-08-20 13:07:49 +08:00
我倒是挺好奇,会这题的人,有觉得楼主面试问这题没有意义么
nznd
2020-08-20 13:08:27 +08:00
常用 python 的我 第一反应想出来的就是基础的模拟按位加法,然后一想 python 无限长度 int 都可以加,就去看了下实现
https://github.com/python/cpython/blob/2d264235f6e066611b412f7c2e1603866e0f7f1b/Modules/_decimal/_decimal.c
现在在怀疑人生
phpfpm
2020-08-20 13:09:19 +08:00
@672795574 应该不会吧,这个能干净利索做出来的人(不太多)
我会加问一道 DP 以及变种。

或者简历优秀的直接问 dp 了。
phpfpm
2020-08-20 13:11:44 +08:00
@nznd 我承认我看了半天没找到重点……
不过高精度计算就这样,还要兼顾效率什么的。

两个大数相乘可优化的点就更多了,减少乘法运算就是提升运算速度。
XisucksYi
2020-08-20 13:13:51 +08:00
我要是面試官的話, 我出冒泡排序題, 寫出來的我肯定過濾掉這種人的, 因為知道怎麼寫的肯定事先了解過冒泡排序, 說明他平時浪費時間搞這些算法, 我可不想跟這種書呆子做同事.
shilyx
2020-08-20 13:15:03 +08:00
直接面试求 100 的阶乘得了
672795574
2020-08-20 13:20:36 +08:00
@phpfpm DP 是个好题目,本身的框架就几行,看看对方怎么得出递推公式,有来有回交流一下,思路 /沟通都可以看出来。我被问得最多的也是 DP..
phpfpm
2020-08-20 13:20:47 +08:00
@XisucksYi 笑死了。

我是面试者,面试官出了一道 sb 题目,我表示我的瑞斯拜做了,然后面试官说我是书呆子挂掉我了。

???

不过我要是真的遇上 bubble sort,我也许会写一个 array.map.map 这样的代码,你问的问题 sb 我就给你炫技嘛 多大点事儿。

@shilyx 这个过分了,考这个剩不下几个人。
phpfpm
2020-08-20 13:24:50 +08:00
@672795574 等我结束这个阶段招聘之后我单独写一个 dp 的面试技巧(从面试官的角度)

本质上来说我(现在面试招聘的岗位)不需要算法大牛(业务属性相关),希望面试者具有聪明+思维严谨的属性。

当然如果是其他业务需求考察 dp 就更难了,比如剪枝优化等等,leatcode 偏难的题目的思路:
硬钢肯定超时,不优化的 dp 过不去几个点,优化到一定程度才能 AC 。
XisucksYi
2020-08-20 13:28:51 +08:00
@phpfpm 呵呵, 你真把這些算法當個寶? 瞧你那書生氣. 平時 就沒少浪費時間在算法上.

眼壓高不高? 近視幾度了?

小心長時間 coding 電腦把你腦子輻射萎縮了. 建議多出去曬曬太陽.
nznd
2020-08-20 13:29:55 +08:00
@phpfpm #66 怎么说呢 我尝试看了 10 分钟后 还是一头雾水 只能感叹一句人生苦短 我用 python (
crazycarry
2020-08-20 13:32:52 +08:00
看到你的回复了,真把自己当个菜?还面试官,,真当自己是个官了。是哪个大厂的?要是垃圾厂别笑死人了
tigren
2020-08-20 13:34:46 +08:00
我应该属于啰哩啰唆的那种的,遥记得第一次写的时候我写的是右边对齐,然后从左边开始一位位加,做完面试官表示很无语:虽然你这不算错,但是感觉这么别扭
CismonX
2020-08-20 13:42:33 +08:00
我大三的时候面字节跳动实习岗位的时候让我手写大数乘法,要求优于平方时间复杂度,然后我给他写了个 karatsuba 算法,他看了看不满意(可能写的不太对),然后我跟他说我还知道有个 toom-cook 算法,但是不会写。然后就没有然后了。。
phpfpm
2020-08-20 13:42:56 +08:00
@XisucksYi @livid 骂人了啊


@nznd 2333 你说的是题目还是解答
XisucksYi
2020-08-20 13:43:31 +08:00
@crazycarry 是回復我的嘛?

大廠才完蛋, 股份都被分完了, 小廠直接隨便玩都能玩死他, 小廠更好玩
jlak0106
2020-08-20 13:44:01 +08:00
是挺垃圾的,大厂估计没这闲功夫在这发帖吧
wutiantong
2020-08-20 13:49:48 +08:00
@wutiantong 上面写得有点问题。。。

std::string add(std::string a, std::string b) {
std::string result;
auto a_i = a.rbegin(), b_i = b.rbegin();
char ten = 0;
while (a_i != a.rend() || b_i != b.rend()) {
char x = 0; if (a_i != a.rend()) x = (*a_i++) - '0';
char y = 0; if (b_i != b.rend()) y = (*b_i++) - '0';
auto c = x + y + ten;
if (c > 9) {
c -= 10;
ten = 1;
} else ten = 0;
result.insert(result.begin(), c + '0');
}
return result;
}

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

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

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

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

© 2021 V2EX