9.1 蚂蚁集团大安全二面加试编程
第一题:k个一组反转链表
这里我用的递归完成的,我认为我这种写法是这题最好理解的写法
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
ListNode* newHead = nullptr;
ListNode* cur = head;
//先检查前k个元素是否非空
for (int i = 0; i < k; i++) {
if (cur == nullptr) {
return head;
}
cur = cur->next;
}
//递归处理k + 1之后的部分
newHead = reverseKGroup(cur, k);
//头插法
cur = head;
for (int i = 0; i < k; i++) {
ListNode* temp = cur;
cur = cur->next;
temp->next = newHead;
newHead = temp;
}
return newHead;
} 第二题,一种加密方式是使用一个数组K,每次加密,对应位置的数都会移动到K对应位置值作为下标的位置,求count次加密后的数组 这题我当场就暴力平方复杂度做完了
后面发现这题可以还有讨论的空间,比如加密多少次会循环一下,和同学讨论了可以用状态机,或者图,循环周期是所有循环联通单元的最小公倍数。
#蚂蚁金服##蚂蚁集团##笔经#
