第四范式不好吃的凉面
应聘的第四范式的SP专场,岗位是计算机视觉岗,然后昨晚熬夜了(熬到两点),早上起来头很晕,昏昏沉沉的,
面试官一上来就说面试时间有限,我们跳过自我介绍,直接coding吧(那就直接coding吧,不coding还能怎么办),
然后看到题目大脑一片空白(明明剑指offer刷到过,但由于熬夜导致啥都没想起来),好了说多了都是借口,在这立个flag,早睡早起,正式说题
(就两道编程题,其他啥也没问,反正是凉了,放出来造福大家,万一是同一个面试官呢)
第一题:乱序数组,使奇数值排在偶数值之前(要求O(n)时间复杂度,O(1)空间复杂度)
第二题:乱序链表,使奇数值排在偶数值之前(要求O(n)时间复杂度,O(1)空间复杂度)
刚午睡了一下,几分钟就写完了,面试的时候各种卡顿紧张(牛客的视频面,面试官可以看到你在编辑框中的整个coding过程,当然还能看到你)
上代码(有错的话,大家指出哈)
第一题:
#include<iostream> #include<vector> using namespace std; //乱序数组,使奇数值排在偶数值之前(要求O(n)时间复杂度,O(1)空间复杂度) void func(vector<int> &array) { if (array.size() < 2) return; int start = 0, end = array.size() - 1; while (start < end) { while (array[start] & 0x0001) { if (start == end) break; ++start; } while ((array[end] & 0x0001) == 0) { if (end == start) break; --end; } if (start == end) break; int temp = array[start]; array[start] = array[end]; array[end] = temp; ++start; --end; } } int main() { int n; while (cin >> n) { vector<int> input; int temp; for (int i = 0; i < n; ++i) { cin >> temp; input.push_back(temp); } func(input); for (auto it : input) cout << it << ' '; cout << endl; } return 0; }第二题:
#include<iostream> #include<vector> using namespace std; //乱序链表,使奇数值排在偶数值之前(要求O(n)时间复杂度,O(1)空间复杂度) struct ListNode{ int val; ListNode* next; ListNode(int x) :val(x), next(NULL){} }; void func(ListNode** root) { if (root == NULL) return; ListNode* pNode = *root; ListNode* preNode = *root; pNode = pNode->next; while (pNode) { if (pNode->val & 0x0001) { preNode->next = pNode->next; pNode->next = *root; *root = pNode; pNode = preNode->next; } else { preNode = pNode; pNode = pNode->next; } } } ListNode* constructList(const vector<int> &array) { if (array.size() == 0) return NULL; ListNode* root = new ListNode(array[0]); ListNode* pNode = root; for (int i = 1; i < array.size(); ++i) { pNode->next = new ListNode(array[i]); pNode = pNode->next; } return root; } void printList(ListNode* root) { ListNode* pNode = root; while (pNode) { cout << pNode->val << ' '; pNode = pNode->next; } cout << endl; } int main() { int n; while (cin >> n) { vector<int> input; int temp; for (int i = 0; i < n; ++i) { cin >> temp; input.push_back(temp); } ListNode* root = constructList(input); func(&root); printList(root); } return 0; }忽然想到,如果要求保持奇数/偶数相对顺序不变呢?
对于数组,个人只想到O(n^2)复杂度的冒泡法
对于链表,可以把偶数尾插(O(n)时间复杂度,O(1)空间复杂度)
#第四范式##面经##计算机视觉岗##校招#