大家好,我是安然无虞。
文章目录
每篇前言
博客主页:安然无虞
作者认证:2021年博客新星Top2
咱的口号:🌹小比特,大梦想🌹
作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。
火爆专栏:蓝桥杯基础算法剖析
一、选择填空题
1.易错·操作符优先级问题
题目描述:
int i =10;int j =20;int k =3; k *= i + j;
问:k的值是多少?
当时这是一道选择题,有一个选项是50,我傻傻的选了它,其实结果是90,这也就涉及到运算符优先级的问题。
***=、/=、%=…这些优先级都是比较低的**,但是需要强调的是,优先级不要背,大致知道顺序就行了,所以要多看几遍,当然,如果记忆力好并且时间多的话,背也没事。
为了方便大家记忆,给出如下图片,来自:爱学习的诸葛大力举一反三
题目如下:
intfun(int a){ a ^=(1<<5)-1;return a;}
输入: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;}
完整代码:
解题思路:面试官常问的两个问题
问题一:请证明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;}}returnNULL;}
完整代码:
解题思路:面试官问的这个问题你知道吗
问题:怎么求出链表的入口点?
解答:
注意fast走的路程不是L+C+Xfast走的路程是slow的两倍OK,这就是证明过程,不过其实还有一种特别好的方法,给个提示:求链表的相交问题。如果你有思路的话欢迎在评论区留下自己的想法哦,这个方法会在下篇文章中给出哦。
三、遇见安然遇见你,不负代码不负卿。
今天就到这里咯,欢迎大家在评论区留下另外一种方法的解题思路哦,最后,制作不易,求老铁的三连鸭。
版权归原作者 安然无虞 所有, 如有侵权,请联系我们删除。