第一轮算法题:每隔N个节点反转单链表
void reverse(ListNode* pHead, int n){
if(pHead == nullptr)
return ;
// 先求出链表总长度
int len = 0;
ListNode* pNode = pHead;
while(pNode != nullptr){
pNode = pNode->next;
len++;
}
// 分段反转
int before = len / n;
int after = len % n;
vector<int> ans;
for(int i = 1; i <= before; i++){
for(int j = 1; j <= n; j++){
ans.push_back(pNode->val);
pNode = pNode->next;
}
for(int j = ans.size() - 1; j >= 0; j--)
printf("%d", ans[j]);
ans.clear();
}
if(after > 0){
for(int i = 1; i <= after; i++){
ans.push_back(pNode->val);
pNode = pNode->next;
}
for(int i = ans.size() - 1; i >= 0; i--)
printf("%d", ans[i]);
}
}
第二轮算法题:顺时针90°旋转数组(没做出来,但这个题太印象了,大家得背下来)
int main()
{
int rows = 4;
int cols = 4;
int a[rows][cols]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}};
int b[rows][cols];
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
//b[i][j]=a[rows - 1 - j][i]; //顺时针旋转90度,核心算法
b[i][j] = a[rows - 1- i][rows - 1- j]; //顺时针旋转180度,核心算法
//b[i][j]=a[j][rows - 1-i]; //顺时针旋转270度,核心算法
}
}
for(int i = 0; i < rows; i++)
{
for(int j = 0 ; j < cols; j++)
{
printf("%d", a[i][j]);
}
printf("
");
}
printf("
");
for(int i = 0; i < rows; i++)
{
for(int j = 0 ; j < cols; j++)
{
printf("%d",b[i][j]);
}
printf("
");
}
return 0;
}
第一轮面试是一个帅气的小哥哥,问的问题都还挺简单,算法题也比较容易
第二轮面试官一看就是一个大佬,指着我的项目问,一直问我的Linux任务是怎么调度的,是怎么去判断我的任务有没有被出触发的,然后一直问我的Redis优化,项目优化,我勒个去。。。这种题我就没资格答......可能觉得我太菜了,最后给我出了个简单的算法题,但是我简单的算法题也没做出来哈哈哈哈哈~
果不其然,面试结束后10分钟就收到了滴滴的感谢信~