当前位置: 首页 > news >正文

建了个网站百度上会有么比分网站仿站建设

建了个网站百度上会有么,比分网站仿站建设,蛇口网站建设公司,电脑做试卷的网站每题代码汇总:登录 - Gitee.com 上一章回顾:数据结构:单链表的应用(力扣算法题)第一章-CSDN博客 1.相交链表 160. 相交链表 - 力扣(LeetCode) 理解题意: 思路: 分别…

每题代码汇总:登录 - Gitee.com

上一章回顾:数据结构:单链表的应用(力扣算法题)第一章-CSDN博客

1.相交链表

160. 相交链表 - 力扣(LeetCode)

理解题意:

思路:

分别遍历两条单链表的长度,两条单链表长度相减,得到长度差的绝对值,让长一些的链表往前遍历长度差个结点,再让两条链表同步遍历,找相同结点。

注意:此处相同是指地址相同而不是值相同。

代码见下:

typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//求链表长度ListNode* pa = headA;ListNode* pb = headB;int sizeA = 0, sizeB = 0;while(pa){++sizeA;pa = pa->next;}while(pb){++sizeB;pb = pb->next;}//求链表长度差int gap = abs(sizeA - sizeB);//得到的是绝对值//定义长短链表//假设ListNode* shortlist = headA;ListNode* longlist = headB;if(sizeA > sizeB){longlist = headA;shortlist = headB;}//长链表往前遍历while(gap--){longlist = longlist->next;}//两链表一起走while(shortlist && longlist){if(shortlist == longlist){return shortlist;}shortlist = shortlist->next;longlist = longlist->next;}//不相交return NULL;
}

最终通过测试。

注意:

2.环形链表

141. 环形链表 - 力扣(LeetCode)

理解题意:

思路一:

使用快慢指针,慢指针一次走一步,快指针一次走两步,如果快指针和慢指针指向同一个结点,说明链表带环。

代码见下:

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

最终通过测试。

证明一:

证明为什么快指针每次走两步,慢指针每次走一步就可以相遇?

当slow刚入环时,其与fast的距离最远,假设为N,那么当slow走一步,fast走两步时,距离变为N-1,以此类推,最终N == 0。

证明二:

当快指针每次走3步,走4步……还能满足条件吗?

以每次走三步为例,并且需要对N进行分类讨论:

此时可以得到永远不能相遇的条件:N为奇数,C为偶数。那么,此条件正确吗?

此处假设环的周长为C,头结点到slow结点的长度为L。并且此时fast指针已经环绕X周。

依旧沿用上面的条件:3 * 慢指针路程 == 快指针路程

在追逐过程中,快慢指针所走过的路径长度:

fast:L + xC + C - N

slow:L

此时建立方程式:3L == L + xC + C - N

得:2L == (x+1)C - N,此时分两种情况:

情况1:偶数 = 偶数 - 偶数

情况2:偶数 = 奇数 - 奇数

此时可以证明上述得到的结论:N为奇数,C为偶数 不成立,则当快指针每次走3步,走4步……时,两指针依旧会相遇。

思路二:

使用快慢指针,快指针走3,4,5……步

代码如下:

typedef struct ListNode ListNode;
bool hasCycle(struct ListNode* head) {ListNode *slow, *fast;slow = fast = head;while (fast && fast->next) {slow = slow->next;int n = 4; // fast每次⾛三,四……步while (n--) {if (fast->next)fast = fast->next;elsereturn false;}if (slow == fast) {return true;}}return false;
}

最终测试通过。

总结:虽然已经证明了快指针不论走多少步都可以满足在带环链表中相遇,但是在编写代码的时候 会有额外的步骤引入,涉及到快慢指针的算法题中通常习惯使用慢指针走⼀步快指针走两步的方式。

3.环形链表II

142. 环形链表 II - 力扣(LeetCode)

理解题意:

思路:

使用快慢指针,在环里一定会有相遇点,此时:相遇点到入环结点的距离 == 头结点到入环结点的距离。

代码如下:

typedef struct ListNode ListNode;
struct ListNode *detectCycle(struct ListNode *head) {//创建快慢指针ListNode* slow = head;ListNode* fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast){//相遇点:使用curr == slow,不动head,且使curr与slow一样每次走一步ListNode* curr = head;while(curr != slow){curr = curr->next;slow = slow->next;}//入环第一个结点return curr;}}//不带环return NULL;
}

最终测试通过。

证明:

为什么在带环链表中,快慢指针相遇点到入环结点的距离 == 头结点到入环结点的距离?

此处,E为入环结点,M为相遇点,R为周长,L为头结点到入环结点的距离。

快慢指针在相遇点走的总路程:

slow = L + X

fast = L + X + nR,nR为fast指针的路程。

因为:2 * slow = fast

则:L = nR - X

L = (n - 1)R + R - X   ,其中,L为头结点到入环结点的距离,R-X为相遇点到入环结点的距离。此时,(n-1)R可省略,不影响结果。

本章完。

http://www.dtcms.com/a/484225.html

相关文章:

  • 已有备 网站新增网站网站建设网络推广广告语
  • 固安企业网站建设深圳集团网站建设服务
  • 内部劵淘网站怎么做网站是什么?
  • 好好建站做标书有什么好的网站吗
  • 深度学习之YOLO系列YOLOv3
  • 猪八戒网站开发合同华为企业网站建设需求分析
  • HTML网站页面建设深圳建网站公司哪家好
  • 网站建设 电子商务 品牌首选IDC在常州 做兼职上什么网站
  • 网站换模板影响云服务器做的网站需要备案
  • 太原网站seo服务个人网站制作流程图片
  • 微信网站主题做别墅花园绿化的网站
  • Oracle OCM 认证的定位与价值
  • 如何快速查找并连接到陌生的MySQL数据库?
  • 怎样做网站推广啊视频企业网站怎么制作
  • 做能收款的网站多少钱wordpress 目录遍历
  • 企业做网站的费用计入什么科目中山网站设计
  • 软件编程课程:课程目录介绍 总纲
  • 阿里云的wordpress如何设置密码大连企业网站排名优化
  • 网站欢迎页面设计松江网站建设培训费用
  • 网站海外推广平台百度手机网址提交
  • 东莞公司企业设计网站建设邢台视频优化排名
  • 2016年4月自考《信息组织》试题
  • 中断向量表作用
  • 如今做哪个网站能致富商丘企业网站服务
  • 宁德商城网站建设莱芜手机网站设计公司
  • 低价网站建设策划内容在线免费解答网站怎么建
  • 做网站代理怎么样企业网站建设公司丰台
  • 动漫电影做英语教学视频网站有哪些大城网站建设
  • 最牛html5网站建设wordpress做招聘网站
  • TDK TFM系列功率电感