![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
达达_
这个作者很懒,什么都没留下…
展开
-
剑指Offer——输出链表倒数第K个节点
题目:输入一个链表,输出该链表的倒数第K个节点,例如链表尾1、2、3、4、5、6,要求输出倒数第3个节点,则输出节点值为4原创 2018-12-27 12:00:53 · 144 阅读 · 0 评论 -
剑指Offer——链表中环的节点入口
题目:如果链表中存在环,则找出环的入口节点,如下图,环的入口为节点3首先要想办法确认链表中是否有环。链表中有环表明链表中没有尾节点,因此遍历的时候会一直循环下去永不停止。用一个指针的话很难确认表中是否有环。因此我们尝试用两个指针,让一个指针走快一点,一个指针走慢一点,当两个指针指向的节点一样时,可以确认链表中一定有环。否则如果当走得快的那个指针已经到尾节点,链表肯定就没有环了。之后尝试确认...原创 2018-12-27 17:24:50 · 184 阅读 · 0 评论 -
剑指Offer——两个链表的第一个公共节点
题目:输入两个链表,返回两者的第一个公共节点如上图,根据链表的结构,可以看出当两个当链表交汇后,之后的所有节点都肯定会一样。所以第一个问题就要先确定输入的两个链表是否存在公共节点。可以分别遍历链表到末尾,如果两个尾节点一样,可以确认存在公共节点,否则一定不存在。接下来需要确认公共节点的位置,容易看出如果两个链表长度一样的话,那么声明两个分别指向两个链表的头指针,以同样速度遍历链表,当两者首...原创 2018-12-28 10:57:07 · 106 阅读 · 0 评论 -
剑指Offer——删除链表中的节点
给定单向链表的头指针以及链表中的节点指针,要求在O(1)时间内删除该节点这里我们假设给定要删除的节点一定位于链表内。否则的话如果需要确定链表中是否包含该节点,则要O(N)的时间。删除链表中的一个节点有两个方法,方法一如上图(a),需要删除的是节点i,此时需要获得其前一个节点h,将h由原来指向i变为指向j,然后再删除i即可。此法需要获得删除节点的上一个节点,对于本题,由于是单向链表,如果要获...原创 2018-12-28 12:15:23 · 602 阅读 · 0 评论 -
剑指Offer——旋转数组的最小数字
题目:把一个数组的最开始几个元素搬到数组的末尾,叫做数组的旋转。输入一个递增数组的旋转,找出其最小元素,例如数组A{3,4,5,1,2}是数组B{1,2,3,4,5}的一个旋转,输入数组A后,输出最小元素应该为1此题最直观的解法,从头到尾遍历数组,当第N个元素比第N-1个元素小时,第N个元素即为数组的最小元素。此法所需时间复杂度为O(N)注意到在有序数组中查找某个数字的时候是可以用二分查找将时...原创 2018-12-28 20:17:34 · 137 阅读 · 0 评论 -
剑指Offer——找出数组中重复的元素
题目:在一个长度为n的数组中所有数字都在0~n-1的范围内,数组中某些数组是重复的,但是不知道有多少数字重复,也不知道重复了几次。请在数组中找出任意重复的一个数字。例如数组长度为7,{2,3,1,0,2,5,3},对应输出的数字应该是2或者3解决方法有很多,最容易理解的思路是把数组排序,完成后只要再扫描一次数组就可以确认有没有重复数字存在,也可以把所有重复数字找出。排序最快的时间复杂度是O(Nl...原创 2018-12-24 21:06:39 · 869 阅读 · 0 评论 -
剑指Offer-替换空格
题目: 请实现一个函数,把字符串的每一个空格替换成%20. 例如输入 we are happy, 输出we%20are%20happy最简单但是效率很低的做法,是从头到尾扫描字符串,每碰到一个空格就将其替换长%20,同时将字符串向后移动两格,否则%20会将字符串内容覆盖。这种做法的时间复杂度是O(N2^22)。另外一个做法是先扫描一次字符串,确定有多少空格后就能知道字符串在替换后的容量了。再从...原创 2018-12-25 08:49:56 · 82 阅读 · 0 评论 -
剑指Offer——翻转链表
题目:写出一个函数,给定一个链表的头节点,反转该链表并输出其头节点链表的每个节点定义为一个struct,其包含元素以及下一个节点的地址struct Node{ int Value; Node *next; } *LinkList对于链表头和链表尾,也有多种定义方式。比如:链表头定义为表的第一个节点,链表尾定义为最后一个元素。此时LinkList list;int value...原创 2018-12-25 16:09:13 · 182 阅读 · 0 评论 -
剑指Offer——合并两个排序链表
题目:输入两个递增排序的链表,合并两个链表并使新链表依然是有序的链表定义如下:typedef struct ListNode{ int Value; ListNode *Next;} *LinkList;例子如下:首先考虑输入特殊情况。我们假设输入链表如果不为空的话必然有序,也就是说不用判断其有序性。当输入链表都为空指针,此时返回的链表也需要为空指针。如果输入链表其中一个...原创 2018-12-25 17:19:32 · 119 阅读 · 0 评论