《每日一套题·提升你我能力》· 第三篇【面试官问的这个问题,你知道怎么回复吗?】

举报
安然无虞 发表于 2022/05/27 00:53:45 2022/05/27
【摘要】 大家好,我是安然无虞。 文章目录 每篇前言 一、选择填空题1.易错·操作符优先级问题举一反三2.整形提升问题3.易错·无符号数问题 ...

在这里插入图片描述

大家好,我是安然无虞。

每篇前言


博客主页:安然无虞

作者认证:2021年博客新星Top2

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。

火爆专栏:蓝桥杯基础算法剖析

在这里插入图片描述


一、选择填空题

1.易错·操作符优先级问题

题目描述:

int i = 10;
int j = 20;
int k = 3;
k *= i + j;

   
  
  • 1
  • 2
  • 3
  • 4

问:k的值是多少?
当时这是一道选择题,有一个选项是50,我傻傻的选了它,其实结果是90,这也就涉及到运算符优先级的问题。
*=、/=、%=…这些优先级都是比较低的,但是需要强调的是,优先级不要背,大致知道顺序就行了,所以要多看几遍,当然,如果记忆力好并且时间多的话,背也没事。
在这里插入图片描述为了方便大家记忆,给出如下图片,来自:爱学习的诸葛大力在这里插入图片描述

举一反三

题目如下:

int fun(int a)
{
	a ^= (1 << 5) - 1;
	return a;
}

   
  
  • 1
  • 2
  • 3
  • 4
  • 5

输入:a = 21
输出:a = 10
这里就不解释咯,很简单。

2.整形提升问题

题目描述:
在这里插入图片描述解题思路:
在这里插入图片描述

3.易错·无符号数问题

题目描述:
在这里插入图片描述
解题思路:
其实在注释里就给出了,无符号char,有8位,且全部是数值位,没有符号位,所以其范围是0~255。
这里能看出什么呢,当我们在使用有符号数的时候要特别注意,尤其是有符号数和无符号数相互转换问题更需要格外小心。

在这里插入图片描述

二、编程设计题

面试题:环形链表·I

题目描述:
在这里插入图片描述示例:
在这里插入图片描述代码执行:
本题代码比较简单,难的是分析过程,大厂考察的也是我们分析的过程,所以这里就直接给出代码了,后面再仔细分析为何这样写代码。

bool hasCycle(struct ListNode *head) {
   struct ListNode* slow = head;
   struct ListNode* fast = head;
   while(fast && fast->next)
   {
       slow = slow->next;
       fast = fast->next->next;
       if(slow == fast)
           return true;
   }
   return false;
}

   
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

完整代码:
在这里插入图片描述

解题思路:面试官常问的两个问题

问题一:请证明slow和fast一定会在环里相遇吗,有没有可能追不上?
解答:
在这里插入图片描述所以,当slow走一步,fast走两步时,是一定能追上的。
问题二:slow走一步,fast走三步,这个方法可行吗?slow走一步,fast走四步,这个方法可行吗?。。。请证明
解答:
在这里插入图片描述面试官如果问我们上面的问题,就这样回答即可。

在这里插入图片描述

面试题:环形链表·II

题目描述:
在这里插入图片描述
示例:
在这里插入图片描述
代码执行:
本题跟上一题一样,代码很简单,难的是分析的过程,过程整明白了,代码自然就出来了。

struct ListNode *detectCycle(struct ListNode *head) {
   struct ListNode* slow = head;
   struct ListNode* fast = head;
   while(fast && fast->next)
   {
       slow = slow->next;
       fast = fast->next->next;
       if(slow == fast)
       {
           struct ListNode* meet = slow;
           while(meet != head)
           {
               meet = meet->next;
               head = head->next;
           }
           return meet;
       }
   }
   return NULL;
}

   
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

完整代码:在这里插入图片描述

解题思路:面试官问的这个问题你知道吗

问题:怎么求出链表的入口点?
解答:
在这里插入图片描述注意fast走的路程不是L+C+X在这里插入图片描述fast走的路程是slow的两倍在这里插入图片描述OK,这就是证明过程,不过其实还有一种特别好的方法,给个提示:求链表的相交问题。如果你有思路的话欢迎在评论区留下自己的想法哦,这个方法会在下篇文章中给出哦。

在这里插入图片描述

三、遇见安然遇见你,不负代码不负卿。

今天就到这里咯,欢迎大家在评论区留下另外一种方法的解题思路哦,最后,制作不易,求老铁的三连鸭。

在这里插入图片描述

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/123650013

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。