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

平面设计实习报告网站搜索排名优化软件

平面设计实习报告,网站搜索排名优化软件,网站 选项卡 图标,黑彩网站怎么建设文章目录 Tag题目来源题目解读解题思路方法一:递归方法二:迭代 写在最后 Tag 【递归】【迭代】【链表】 题目来源 21. 合并两个有序链表 题目解读 合并两个有序链表。 解题思路 一种朴素的想法是将两个链表中的值存入到数组中,然后对数组…

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:递归
    • 方法二:迭代
  • 写在最后

Tag

【递归】【迭代】【链表】


题目来源

21. 合并两个有序链表


题目解读

合并两个有序链表。


解题思路

一种朴素的想法是将两个链表中的值存入到数组中,然后对数组进行升序排序,最后将排序好的数组还原回链表,这是一种可行的思路,但是没有充分利用题目已知的两个链表有序的条件,大家可以自行尝试,练习基础语法与建立链表节点的知识。

方法一:递归

我们记两个链表的头节点分别为 l1l2,在合并两个链表的时候会遇到以下三种情况:

  • l1 为空,直接返回 l2
  • l2 为空,直接返回 l1;
  • 两节点都不为空,那么又会分为两种情况:
    • l1 节点值小于 l2 节点值,那么 l1 节点将会是合并后的节点新的头节点,剩下的部分是 l1->nextl2 合并的节点,而合并 l1->nextl2 是合并 l1l2 的子问题,也可以使用 mergeTwoLists 函数来解答,于是有 l1->next = mergeTwoLists(l1->next, l2),并返回 l1
    • 同理,l2 节点值小于 l1 节点值时,有 l2->next = mergeTwoLists(l1, l2->next),并返回 l1
  • 以上这种将问题转换为原问题的子问题的方法,称为递归方法。递归方法是一种边调用边填充的方法。

实现代码

C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {if (list1 == nullptr) {return list2;}else if (list2 == nullptr) {return list1;}else if (list1->val < list2->val) {list1->next = mergeTwoLists(list1->next, list2);return list1;}else {list2->next = mergeTwoLists(list1, list2->next);return list2;}} 
};

python3

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:if l1 is None:return l2elif l2 is None:return l1elif l1.val < l2.val:l1.next = self.mergeTwoLists(l1.next,l2)return l1else:l2.next = self.mergeTwoLists(l1, l2.next)return l2        

复杂度分析

时间复杂度: O ( m + n ) O(m+n) O(m+n) m m m n n n 分别为两个链表的长度,每个节点都是被递归调用一次。

空间复杂度: O ( m + n ) O(m+n) O(m+n),每调用一次函数 mergeTwoLists 都需要消耗栈空间,栈空间的大小取决于递归调用的深度。

方法二:迭代

迭代的方法是一种相对容易理解的方法。为了方便实现,我们定义一个哑节点 dummyListNode* dummy = new ListNode(-1);,最后只需要返回 dummy->next

我们再定义一个节点 prev 用来指向当前值较小的节点,初始 prev = dummy,我们迭代枚举两链表中的节点:

  • prev 指向值较小的节点;
  • 值较小的节点更新为下一个节点,方便下一对节点的比较;
  • prev 更新为下一个节点,为存放下一个更小的节点做准备;
  • 如果有一个链表为空了,直接退出迭代循环;
  • 需要注意这时候,两个链表中可能还有一个链表非空,需要将剩下的非空部分接在 prev 后面。

以上就是本题的迭代方法。

实现代码

C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* dummy = new ListNode(-1);ListNode* prev = dummy;while(list1 && list2){if(list1->val < list2->val){prev->next = list1;list1 = list1->next;}else{prev->next = list2;list2 = list2->next;}prev = prev->next;}prev->next = list1 ? list1 : list2;return dummy->next;}
};

python3

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:dummy = ListNode(-1)prev = dummywhile l1 and l2:if l1.val < l2.val:prev.next = l1l1 = l1.nextelse:prev.next = l2l2 = l2.nextprev = prev.nextprev.next = l1 if l1 is not None else l2return dummy.next

复杂度分析

时间复杂度: O ( m + n ) O(m+n) O(m+n) m m m n n n 分别为两个链表的长度,每个节点都是被递归调用一次。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

http://www.mnyf.cn/news/53053.html

相关文章:

  • 做网站的费用记哪个科目拉新推广平台
  • 网站挂马解决seo网站推广优化
  • 深圳网站备案拍照点seo就业哪家好
  • 台州网站建设公司微信如何投放广告
  • 东莞市住房城乡建设局官网seo职业规划
  • 外贸独立站营销怎么做手游推广去哪里找客源
  • 做h5页面网站有哪些淘宝流量助手平台
  • 在线日程wordpress搜索引擎营销优化
  • 响应式全屏网站seo互联网营销培训
  • 襄阳抖音seo找哪家重庆网站seo外包
  • 江西科技学校网站建设建站推广网站
  • 网站自动生成抖音营销推广怎么做
  • 荆州 商务 网站建设网站怎么优化搜索
  • 网站做关键词排名每天要做什么重庆做优化的网络公司
  • 佛山专业做网站公司哪家好属于seo网站优化
  • 姜堰 万邦建设集团网站长春网站优化咨询
  • dw做动态网站郑州网站排名推广
  • 网站建设公司官方网站网络整合营销的特点有
  • 电话卡分销平台seo待遇
  • 做网站搞笑口号网盘资源免费观看
  • 武汉企业网站营销方式和营销策略
  • 建设交易网站多少钱阿里云域名注册查询
  • 沧州做网站公司可口可乐搜索引擎营销案例
  • 天津公司网站建设域名备案官网
  • 公司的网站建设费用怎么入账营销网页
  • 进行企业网站建设规划深圳搜索seo优化排名
  • 个人建网站允许吗国际新闻最新消息战争
  • asp网站设为首页代码广州营销优化
  • 制作展示型网站公司哪家好win优化大师有用吗
  • 在线A视频网站(级做爰片)福州seo网络推广