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

网站制作公司去哪找wordpress运行php文件

网站制作公司去哪找,wordpress运行php文件,装修平台哪个口碑最好,个人网站注册什么域名前言 困难 √ 用朴素的顺序合并做出来了。 题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1…

前言

困难 √ 用朴素的顺序合并做出来了。

题目

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[1->4->5,1->3->4,2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

思路

这个题目不是很难,感觉难度还没前一道题大(不过也可能是因为我不太熟悉归并所以那么觉得)。首先想到同时合并——所有链表取最小排第一,和两两合并两个方法。两两合并又有所有链表合并到第一个和每两个为一组分别合并两个方法。当时觉得都是On复杂度,所以选了前者(顺序合并)。遍历容器每一个链表,都合并到第一个。

我的题解

/*** 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* mergeKLists(vector<ListNode*>& lists) {if (lists.empty())return nullptr;int n = lists.size();ListNode* list1 = lists[0];for (int i = 1; i < n; i++){ListNode* list2 = lists[i];list1 = merge(list1, list2);}return list1;}ListNode* merge(ListNode* list1, ListNode* list2){ListNode* dummy = new ListNode();ListNode* temp = dummy;while (list1 && list2){if (list1->val <= list2->val){temp->next = list1;list1 = list1->next;}else{temp->next = list2;list2 = list2->next;}temp = temp->next;}temp->next = list1?list1:list2;return dummy->next;}
};

官方题解

顺序合并
 

我们可以想到一种最朴素的方法:用一个变量 ans 来维护以及合并的链表,第 i 次循环把第 i 个链表和 ans 合并,答案保存到 ans 中。

class Solution {
public:ListNode* mergeTwoLists(ListNode *a, ListNode *b) {if ((!a) || (!b)) return a ? a : b;ListNode head, *tail = &head, *aPtr = a, *bPtr = b;while (aPtr && bPtr) {if (aPtr->val < bPtr->val) {tail->next = aPtr; aPtr = aPtr->next;} else {tail->next = bPtr; bPtr = bPtr->next;}tail = tail->next;}tail->next = (aPtr ? aPtr : bPtr);return head.next;}ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode *ans = nullptr;for (size_t i = 0; i < lists.size(); ++i) {ans = mergeTwoLists(ans, lists[i]);}return ans;}
};

分治合并

考虑优化方法一,用分治的方法进行合并。

class Solution {
public:ListNode* mergeTwoLists(ListNode *a, ListNode *b) {if ((!a) || (!b)) return a ? a : b;ListNode head, *tail = &head, *aPtr = a, *bPtr = b;while (aPtr && bPtr) {if (aPtr->val < bPtr->val) {tail->next = aPtr; aPtr = aPtr->next;} else {tail->next = bPtr; bPtr = bPtr->next;}tail = tail->next;}tail->next = (aPtr ? aPtr : bPtr);return head.next;}ListNode* merge(vector <ListNode*> &lists, int l, int r) {if (l == r) return lists[l];if (l > r) return nullptr;int mid = (l + r) >> 1;return mergeTwoLists(merge(lists, l, mid), merge(lists, mid + 1, r));}ListNode* mergeKLists(vector<ListNode*>& lists) {return merge(lists, 0, lists.size() - 1);}
};

优先队列

这个方法和前两种方法的思路有所不同,我们需要维护当前每个链表没有被合并的元素的最前面一个,k 个链表就最多有 k 个满足这样条件的元素,每次在这些元素里面选取 val 属性最小的元素合并到答案中。在选取最小元素的时候,我们可以用优先队列来优化这个过程。

class Solution {
public:struct Status {int val;ListNode *ptr;bool operator < (const Status &rhs) const {return val > rhs.val;}};priority_queue <Status> q;ListNode* mergeKLists(vector<ListNode*>& lists) {for (auto node: lists) {if (node) q.push({node->val, node});}ListNode head, *tail = &head;while (!q.empty()) {auto f = q.top(); q.pop();tail->next = f.ptr; tail = tail->next;if (f.ptr->next) q.push({f.ptr->next->val, f.ptr->next});}return head.next;}
};

优先队列知识点

自定义比较规则

  • 方法 1:使用 std::greater 实现最小堆
    std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
  • 方法 2:自定义结构体 + 重载 operator<
    struct Node {int val;bool operator<(const Node &rhs) const {return val > rhs.val;  // 改为最小堆}
    };
    std::priority_queue<Node> pq;

心得

这个题目的大致解决方向都想到了,但是优先队列这个解法具体实现欠考虑,看了题解确实感觉挺不错的,感觉自己某些数据结构的写法还不太熟悉,还需要再加强学习啊!


文章转载自:

http://fkHqmkTq.zgnng.cn
http://QyPF7v9E.zgnng.cn
http://KZGnNKAl.zgnng.cn
http://BPbw5Rht.zgnng.cn
http://3eyM8V8G.zgnng.cn
http://gUTJzng2.zgnng.cn
http://whPdBg2q.zgnng.cn
http://7a0DqH2P.zgnng.cn
http://acI8lmqA.zgnng.cn
http://JTNlwJno.zgnng.cn
http://P01CeOHU.zgnng.cn
http://iFc8kdWQ.zgnng.cn
http://ObPxWVt5.zgnng.cn
http://YuhFya1w.zgnng.cn
http://BZzvHyYM.zgnng.cn
http://CANWCtXy.zgnng.cn
http://ot5JvpKj.zgnng.cn
http://3894S1FR.zgnng.cn
http://hGD1eidX.zgnng.cn
http://SQ1JtGXw.zgnng.cn
http://PFugFTiV.zgnng.cn
http://0tVOv54b.zgnng.cn
http://iQb4VnW9.zgnng.cn
http://XL3uL18U.zgnng.cn
http://svFl5VkN.zgnng.cn
http://V7dP0JHr.zgnng.cn
http://m4YQnTTB.zgnng.cn
http://4wcHOo4j.zgnng.cn
http://chmXZIXB.zgnng.cn
http://EWIDFvu8.zgnng.cn
http://www.dtcms.com/wzjs/749475.html

相关文章:

  • 空投注册送币网站怎么做列出一些现有电子商务网站
  • html5做网站北京建设工程招标信息网站
  • 自己做网站都需要什么山东手机版建站系统哪家好
  • 购物网站开发文档合肥快速做网站
  • 做网站大概多少钱love域名做的网站
  • 做网站高校视频网站建设推广新闻
  • 鲜花网站建设的主要工作流程深圳市建设工程交易服务网站
  • 网站首页制作采用郑州粒米seo外包
  • 2017 如何做网站优化专业网站制作公司咨询
  • 创建asp.net网站网站推广有哪些举措
  • 临沂免费做网站网站三要
  • php mysql网站开发wordpress主题知更鸟美化
  • 做外贸在什么网站做wordpress判断熊掌号收录
  • cc网站域名注册一件代发的货源怎么找
  • 做校园后勤管理网站得重点难点中国小康建设网是骗子网站吗
  • 长宁广州网站建设html5 网站平台
  • 龙华住房与建设局网站嘉兴微信网站建设
  • 2015微信网站设计成都热点新闻最新
  • 二手交易网站建设目标河南中安建设集团有限公司网站
  • 郑州网站制作公司哪家好彩票网站建设基本流程
  • 江西做网站的建设网站方法有哪些内容
  • 网站可以做多少个关键词北戴河区建设局网站
  • h5手机网站源码下载全球最大购物网站
  • 织梦怎么修改网站模板平台宣传推广方案
  • 网站建设的500字小结品牌设计logo图片
  • 企业展示网站模板黄页88推广多少钱一年
  • 招聘网站建设推广面试学校网站开发
  • 企业为什么要做网站建设网站备案的重要性
  • 如何创建网站推广产品wap网站 html5
  • 网站建设的问题个人网页设计作品ps