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

中小学 网站建设 通知线上广告推广

中小学 网站建设 通知,线上广告推广,国外访问国内网站速度,网站开发外包报价合并两个有序链表 将两个升序链表合并为一个新的升序链表。 用两个指针指向两个链表的表头,然后每次比较一下哪个值小,将较小的节点接到答案后面即可。 ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {auto dummy new ListNode(), p du…

合并两个有序链表

将两个升序链表合并为一个新的升序链表。

用两个指针指向两个链表的表头,然后每次比较一下哪个值小,将较小的节点接到答案后面即可。

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {auto dummy = new ListNode(), p = dummy;auto l1 = list1, l2 = list2;while(l1 && l2) {   // 当l1和l2都不为空才进入循环if(l1->val <= l2->val) {p->next = l1;   // 将l1节点接到答案尾部p = p->next;    // 将答案和l1后移l1 = l1->next;}else {p->next = l2;p = p->next;l2 = l2->next;}}if(l1)  p->next = l1;if(l2)  p->next = l2;return dummy->next;
}

括号生成

n n n对括号,生成所有可能并且有效的括号组合。

有效的就是要满足任意前缀中左括号的数量一定大于等于右括号的数量。

然后做DFS,每次递归时都要保证左括号数量大于等于右括号数量。

也就是说,只有左括号数量大于右括号数量时,才可以放右括号。(前提是还有右括号可以放)

vector<string> ans;void dfs(int n, int l, int r, string path) {if(l == n && r == n) {          // 左右括号都放满了则输出ans.push_back(path);return ;}if(l != n)  dfs(n, l + 1, r, path + "(");       // 若有左括号就可以直接放if(r != n && l > r) dfs(n, l, r + 1, path + ")");   // 若有右括号且前缀中左括号数量严格大于右括号数量则可以放
}vector<string> generateParenthesis(int n) {dfs(n, 0, 0, "");return ans;
}

合并K个升序链表

给定一个链表数组,每个链表均为升序排列,将所有链表合并到一个升序链表中。

本质上和合并两个有序链表相似,即每次找最小的节点并接到答案后面。但是这样每次找会有 O ( k ) O(k) O(k)的比较次数。

因此可以采用堆优化来查找最小值,即每次把每个链表都存一个节点到堆中,取最小值接到答案后面,是 O ( 1 ) O(1) O(1)的比较次数。

优先队列默认是大根堆,要重载小于号才能变成小根堆,如priority_queue<int, vector< int>, greater< int>> q;

若要重载其他数据结构的小于比较,需要仿函数来重载。

struct cmp {bool operator() (ListNode* a, ListNode* b) {    // 仿函数return a->val > b->val;                     // 重载为大于}
};
ListNode* mergeKLists(vector<ListNode*>& lists) {auto dummy = new ListNode(), p = dummy;priority_queue<ListNode*, vector<ListNode*>, cmp> heap;for(auto list : lists)  if(list)    heap.push(list);    // 样例2中有空链表while(!heap.empty()) {auto list = heap.top();         // 队头是最小的节点heap.pop();p->next = list;p = p->next;if(list->next)  heap.push(list->next);}return dummy->next;
}

两两交换链表中的节点

两两交换链表中相邻的节点,并返回交换后链表的头节点。

所有链表题,只要涉及到头节点的判断问题,都可以加一个虚拟头节点

head -> 1 -> 2 -> 3 -> 4 -> tail
head -> 2 -> 1 -> 3 -> 4 -> tail

要实现上述链表的两两交换,比如要交换1和2节点,需要将head指向2,将1指向3,将2指向1,实现这三步即可。

i -> j -> k -> l
交换j和k
i->next = k
j->next = k->next
k->next = j
ListNode* swapPairs(ListNode* head) {auto dummy = new ListNode(-1, head), p = dummy;while(p->next && p->next->next) {// p -> a -> bauto a = p->next, b = a->next;p->next = b;a->next = b->next;b->next = a;if(p->next->next)   p = p->next->next;}return dummy->next;
}

K个一组翻转链表

将链表每 k k k个节点一组进行翻转,返回修改后的链表。如果节点总数不是 k k k的整数倍,最后剩余的节点保持原有顺序。

head -> 1 -> 2 -> 3 -> 4 -> 5 -> tail
head -> 4 -> 3 -> 2 -> 1 -> 5 -> tail
head    1 <- 2 <- 3 <- 4    5 -> taila    ba    ba    b

我们采取这样的策略,先改变内部的方向,内部都更改完之后,再更改两边的指向关系,如下代码和示意图:

ListNode* reverseKGroup(ListNode* head, int k) {auto dummy = new ListNode(-1, head);for (auto p = dummy;;) {auto q = p;for (int i = 0; i < k && q; i ++ ) q = q->next;if (!q) break;      // 以上为判断后面是否还有k个元素// head -> 1 -> 2 -> 3 -> 4 -> 5 -> tail//    p    a    b//    p         a    b//    p              a    bauto a = p->next, b = a->next;for (int i = 0; i < k - 1; i ++ ) {// a -> b -> cauto c = b->next;// a <- b  cb->next = a;// 移动到下一轮更改的位置a = b, b = c;}// head    1 <- 2 <- 3 <- 4    5 -> tail//    p    c              a    b// head    4 -> 3 -> 2 -> 1    5 -> tail//    p    a              c    bauto c = p->next;p->next = a, c->next = b;// head -> 4 -> 3 -> 2 -> 1 -> 5 -> tail//                        pp = c;}return dummy->next;
}
http://www.dtcms.com/wzjs/326666.html

相关文章:

  • 网站建设数据安全分析百度推广怎么联系
  • 帮其他企业做网站属于外包公司吗南通seo
  • 信息发布网站怎么做今日新闻消息
  • mb个人网站爱站网能不能挖掘关键词
  • 医药公司网站建设seo搜索引擎优化期末考试
  • 做域名代理网站如何写软文
  • 潍坊做外贸网站建设有没有专门做策划的公司
  • 泉州做网站联系方式免费做推广的网站
  • 网络科技公司注册资金多少资阳地seo
  • 网站开发的功能需求文档模板百度百度一下首页
  • 企业网站建设公司排名安徽疫情最新情况
  • <>中国联通和腾讯
  • 锦州网站开发建设公司网站怎么申请怎么注册
  • 门户网站建设情况总结商铺营销推广方案
  • 国外手机模板网站百度咨询电话 人工客服
  • 模拟百度搜索词进入网站东莞seoseo关键词排名优化
  • 徐州城建吧网站优化员seo招聘
  • 是做网站编辑还是做平面设计磁力兔子
  • 网站做facebook推广短视频营销推广策略
  • 做夹具需要知道的几个网站百度搜索引擎优化公司哪家强
  • 做淘宝头像的网站有哪些域名批量查询
  • dreamweaver做网站seo实战密码在线阅读
  • 响应式网站应用汕头seo排名
  • 嘉兴南湖区建设局网站seo排名第一
  • 承德网站制作报价seo到底是做什么的
  • wordpress 集成环境百度上做优化
  • 二级域名可以做淘客网站提高搜索引擎排名
  • 汪峰做的音乐网站深圳纯手工seo
  • 目前做那些网站能致富营销策划公司主要做些什么
  • 深圳seo网站设计登录百度账号