博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sort List
阅读量:6959 次
发布时间:2019-06-27

本文共 2186 字,大约阅读时间需要 7 分钟。

Sort a linked list in O(n log n) time using constant space complexity.

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *sortList(ListNode *head) {        if(head==NULL||head->next==NULL)            return head;       deque
nodeVec; ListNode *root = new ListNode(-1); while(head){ nodeVec.push_back(head); head = head->next; } buildHeap(nodeVec); int size = nodeVec.size()-1; head= extractMin(nodeVec,size); root->next = head; while(size>-1){ head->next = extractMin(nodeVec,size); head = head->next; } head->next=NULL; head = root->next; delete root; return head; } ListNode* extractMin(deque
&nodeVec,int &size){ ListNode *minNode = nodeVec[0]; int index = 0; exchange(nodeVec,index,size); --size; MIN_Heapity(nodeVec,index,size); return minNode; } void buildHeap(deque
&nodeVec){ int size = nodeVec.size()-1; for(int i = size/2; i>=0; --i){ MIN_Heapity(nodeVec,i,size); } } void MIN_Heapity(deque
&nodeVec, int &p,int &size){ if(size<=0) return; int min,index; index = p; min = nodeVec[p]->val; if(2*p+2<=size && min>nodeVec[2*p+2]->val) { min = nodeVec[2*p+2]->val; index = 2*p+2; } if(2*p+1<=size && min>nodeVec[2*p+1]->val){ min = nodeVec[2*p+1]->val; index = 2*p+1; } if(index!=p){ exchange(nodeVec,index,p); MIN_Heapity(nodeVec,index,size); } } void exchange(deque
&nodeVec, int &i,int &j){ ListNode* tmp = nodeVec[i]; nodeVec[i] = nodeVec[j]; nodeVec[j] = tmp; }};

  TIPS:

用堆排序来做。

本来用快排来做,但最坏情况为O(N ^2),即使采用随机快排,时间代价也不稳定,尤其对于有大量重复的例子,据说可以去重来处理

如果用归并排序,开全局数组N,我发现上面的写法也用了一个N vector的空间。。再改改

转载于:https://www.cnblogs.com/nnoth/p/3766036.html

你可能感兴趣的文章
F5 的SNAT的irules相关配置
查看>>
安装redis(3.2.9)
查看>>
shell脚本之一
查看>>
oracle 12c 关闭统计信息收集和启用统计信息收集
查看>>
修复微商城提交购物车时部分手机号码不识别
查看>>
基于 HTML5 Canvas 的 3D 模型列表贴图
查看>>
ORA-00000 这是什么报错!
查看>>
lvs-dr简单配置
查看>>
hadoop配置lzo
查看>>
脚本调试:一次换行符导致的报错
查看>>
mysql 之 主从同步(单向同步和双向同步)
查看>>
Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl
查看>>
经典的MySQL 数据备份校验daemon程序
查看>>
logrotate日志轮询
查看>>
python之扩展
查看>>
Redis有序集合数据类型操作命令
查看>>
nginx+tomcat 动静分离 的配置文件
查看>>
SaltStck无Master和多Master架构
查看>>
ajax asynx:false
查看>>
online游戏服务器架构--网络架构
查看>>