今天面试遇到的情况

2021-01-28 16:49:15 +08:00
 cxe2v

今天面了一家做笔记的厂,是手写代码面,第一个题就是奇偶排序的问题,题目如下

input: [2,1,5,7,4,9,8,5,6] output: [1,5,7,9,5,2,4,8,6]

输入一个整数数组,期望输出的数组里,奇数在前边,偶数在后边

我想这不简单么,我有好几种办法可以实现这个功能,然后我就写下了如下代码

    function filter(originArray) {
        let oddArray = [];
        let evenArray = [];
        originArray.forEach(item => {
            if (item % 2 == 1) {
                oddArray.push(item);
            }
            else {
                evenArray.push(item);
            }
        })
        return oddArray.concat(evenArray);
    }

其实我还有以下办法可以实现

    function filter(originArray) {
        originArray.sort((a, b) => {
            return b % 2 - a % 2;
        })
        return originArray;
    }

    function filter(originArray) {
        return originArray.filter(a => {
            return a % 2 == 1;
        }).concat(originArray.filter(b => {
            return b % 2 == 0;
        }));
    }

但是我没想到,面试官其实是想考察双指针排序的变种,我对这种双指针得问题本来就不熟,就卡在这问题上搞了 20 来分钟,整得我都没脾气了,汗都整出来了,后面又考察了一个问题,我只知道原理,让我手写又一次写错,就尴尬地结束了这一次面试。

可能刚好对方的实际项目中需要解决这类算法的问题,面试没面好是我的问题,

我想说的是,对于一个问题,没能按面试官想的方式解决,是不是就算活不好了?

9592 次点击
所在节点    职场话题
68 条回复
waytoexplorewhat
2021-01-30 01:38:12 +08:00
我怎么觉得你的问题不是双指针,而是沟通,在解决问题之前应该先澄清问题,有什么需求、输入、输出是什么、约束是什么,这些讨论清楚了才应该开始思考问题的解决
cfwyy
2021-01-30 09:42:57 +08:00
leetcode 有类似题目。
用 python 来解就一行,直接排序就完了,不知道会不会被鄙视 - -

return sorted(arr,key=lambda x:x%2,reverse=True)
cxe2v
2021-01-30 11:20:10 +08:00
@cfwyy #62 会被鄙视,你这跟我写的第二个 function 是一个方法
cxe2v
2021-01-30 11:21:31 +08:00
@waytoexplorewhat #61 我想说的重点不是面试,我是想说工作中遇到这种问题,需要抠细节吗?
iwukong
2021-01-30 14:14:20 +08:00
国内吗 现在国内面试也全算法啦?
cxe2v
2021-01-30 14:48:59 +08:00
@iwukong #65 是的,国内现在稍微好点的厂面试都要面算法了
lewinlan
2021-01-31 23:33:39 +08:00
仔细一看根本就没有排序啊只是交换位置而已,肯定是双指针了,如果我是面试官我也不接受其他解法……
maocat
2021-02-01 14:19:57 +08:00
```python
class Solution(object):
def sort(self, array):
"""
:param array:
"""
length = len(array)
i, j = 0, length - 1
while i < j:
i2 = array[i] % 2 == 0
j2 = array[j] % 2 == 0
if i2 and j2:
j -= 1
elif not i2 and not j2:
i += 1
elif i2 and not j2:
d = array[i]
array[i] = array[j]
array[j] = d
i += 1
j -= 1
else:
i += 1
j -= 1

```

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

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

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

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

© 2021 V2EX