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

中国品牌网站官网百度关键词搜索量

中国品牌网站官网,百度关键词搜索量,网站开发案例,光环时讯网站这道题直接用蠢办法来做的&#xff0c;直接先遍历一遍链表&#xff0c;用一个哈希表统计每个值出现的次数&#xff0c;由于std::map<int, int>会根据键进行升序排序&#xff0c;因此我们将节点的值作为键&#xff0c;其在整个链表中的出现次数作为值&#xff0c;当所有元…


这道题直接用蠢办法来做的,直接先遍历一遍链表,用一个哈希表统计每个值出现的次数,由于std::map<int, int>会根据键进行升序排序,因此我们将节点的值作为键,其在整个链表中的出现次数作为值,当所有元素统计完毕以后,我们直接按照顺序遍历哈希表,然后将一个键对应的值填入到链表中,当哈希表中所有键都填充完毕时,链表就排序好了,直接返回即可。

/*** 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* sortList(ListNode* head) {map<int, int> hash;  //记录各个值的ListNode* current = head;while(current){hash[current -> val]++;current = current -> next;}current = head;for(auto i : hash){while(i.second > 0){current -> val = i.first;current = current -> next;i.second--;}}return head;}
};

在手撕面试的时候这样做肯定是不行的,我又去看了下灵神的题解,他的思路也比较简单易懂,但是需要两道题的前置基础,分别是876. 链表的中间结点和21. 合并两个有序链表,这里就不细讲两道题的解题思路了,我们直接将两道题的函数(middleNode()和mergeTwoLists())搬过来用就行了,假设我们现在已经有了这两个功能的函数,然后我们直接进行递归处理,将一个链表进行排序可以分为如下步骤:

  1. 调用middleNode()获取该链表的中间节点,并将中间节点与上一节点的连接切断,从而分成两条长度相近的链表;
  2. 将两条链表的进行排序,也就是递归调用本题的sortList()函数,然后函数分别返回两条排序过后链表的头节点;
  3. 然后调用mergeTwoLists()将两个有序链表合并,最终拼接回一条完整的链表
  4. 返回链表的头节点
    在这里有几个细节需要说明:1.将中间节点与上一节点的连接断开的操作应当在middleNode()函数内进行,在主函数中是无法追溯到中间节点的上一节点的;2.本题函数需要明确递归终止条件,我们很容易想到:当长度为n(n > 2)的链表被递归拆分出长度为2的子链表时,将其拆分为两条长度为1的链表,此时已经不可拆分,也无需排序,所以当链表只含头节点这一个节点时,直接返回头节点即可。**还有一种极端情况:**当输入的原始链表为空时,也不需要进行排序,直接返回头节点即可。
    下面是我的代码
/*** 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://876. 链表的中间结点(代码不完全与那题一样,本题还须做断开链表处理)ListNode* middleNode(ListNode* head) {ListNode* fast = new ListNode();ListNode* slow = new ListNode();fast = head;slow = head;ListNode* pre;while(fast && fast -> next){pre = slow;slow = slow -> next;fast = fast -> next -> next;}pre -> next = nullptr;return slow;}//21. 合并两个有序链表ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {//处理终止条件if(!list1) return list2;if(!list2) return list1;//递归主体逻辑if(list1 -> val < list2 -> val){list1 -> next = mergeTwoLists(list1 -> next, list2);return list1;}else{list2 -> next = mergeTwoLists(list2 -> next, list1);return list2;}}ListNode* sortList(ListNode* head) {//终止条件//链表为空或链表仅有一个节点则无需排序,直接返回if(!head || !head -> next)return head;//递归主体逻辑//1.将链表拆成两条ListNode* left = head;ListNode* right = middleNode(head);//2.将两条链表进行排序left = sortList(left);right = sortList(right);//3.将两条有序链表合并head = mergeTwoLists(left, right);return head;}
};
http://www.dtcms.com/wzjs/214856.html

相关文章:

  • 平顶山做网站多少钱怎么做网站模板
  • 中国最好的旅游网站千峰培训出来好就业吗
  • 华丽的网站模板镇江百度seo
  • 网站可信认证必须做吗本地免费发布信息网站
  • 永嘉营销网站建设做网页用什么软件好
  • 黔东南购物网站开发设计指数函数求导公式
  • 建立企业网站要多少钱免费发广告的网站大全
  • 个人可以做彩票网站吗培训机构排名全国十大教育机构排名
  • 网站报价详情南宁网站建设优化服务
  • 东莞seo管理泽成seo网站排名
  • 做软件工资高还是网站最近一周的新闻
  • 集团公司网站开发网上在哪里打广告最有效
  • 怎么样才能自己做网站打广告seo牛人
  • 做课件需要的纯音乐网站自助建站系统源码
  • 廊坊哪家公司做网站友点企业网站管理系统
  • 广州专业做网站排名哪家好知识付费网站搭建
  • 做网站用什么工具seo整站优化多少钱
  • vps网站如何设置缓存简述seo
  • 蔺市网站建设外贸推广平台哪个好
  • 网站界面设计的流程qq营销推广方法和手段
  • 做网站的技术风险sem公司
  • 怎么做动态网站系统深圳seo优化方案
  • 成都网站建设及推广什么软件可以免费发广告
  • 电子商城网站开发合同网站批量收录
  • 哪些做任务可以赚钱的网站百度信息流怎么收费
  • 加猛挣钱免费做网站软件国外十大免费服务器和域名
  • 电子商务网站建设规划app关键词优化
  • 百度网页收录seo的方法有哪些
  • winscp怎么做网站网站怎么进入
  • 网站建设管理流程百度seo关键词排名价格