Sort List

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

思路:题目要求O(n log n)的时间复杂度以及常空间复杂度,因此,使用归并排序策略。

 1 class Solution {
 2 public:
 3     ListNode *sortList( ListNode *head ) {
 4         if( !head || !head->next ) { return head; }
 5         if( !head->next->next ) {
 6             if( head->val > head->next->val ) {
 7                 int temp = head->val;
 8                 head->val = head->next->val;
 9                 head->next->val = temp;
10             }
11             return head;
12         }
13         ListNode *slow = head, *fast = head->next;
14         while( fast->next ) {
15             slow = slow->next;
16             fast = fast->next;
17             if( fast->next ) { fast = fast->next; }
18         }
19         fast = slow->next; slow->next = 0;
20         slow = sortList( head );
21         fast = sortList( fast );
22         return merge( slow, fast );
23     }
24 private:
25     ListNode *merge( ListNode *slow, ListNode *fast ) {
26         if( !slow ) { return fast; }
27         if( !fast ) { return slow; }
28         ListNode *head = 0, *end = 0;
29         if( slow->val <= fast->val ) {
30             head = end = slow; slow = slow->next;
31         } else {
32             head = end = fast; fast = fast->next;
33         }
34         while( slow && fast ) {
35             if( slow->val <= fast->val ) {
36                 end->next = slow;
37                 end = end->next;
38                 slow = slow->next;
39             } else {
40                 end->next = fast;
41                 end = end->next;
42                 fast = fast->next;
43             }
44         }
45         if( slow ) { end->next = slow; }
46         else { end->next = fast; }
47         return head;
48     }
49 };

Sort List,布布扣,bubuko.com

时间: 2024-08-10 00:06:42

Sort List的相关文章

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

Redis学习之Sort Set详解

本文和大家分享的主要是Redis中Sort Set相关内容,一起来看看吧,希望对大家学习redis有所帮助. 游戏服务器需要做一个排行榜实时更新,如果沿用传统的方法,一般是通过后端的定时任务去跑数据来生成排行榜数据,这种方法一方面无法满足产品对功能实时性的要求,另一方面也一定程度上消耗服务器端有限的资源.如果从每次数据库读取数据并进行排名(使用Mysql的sort关键字进行排序),在关卡数据量的级数大时是一种效率低的方法.在查阅大量资料后,发现了Redis中的有序集合(Sort Set). Re

75. Sort Colors

Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and bl

[BZOJ1552][Cerc2007]robotic sort

试题描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. 输出 输出共一行,N个用空格隔开的正整数P1,P2,P3-Pn,Pi表示第i次操作前第i小的物品所在的位置. 注意:如果第i次操作前,第i小的物品己经在正确的位置Pi上,我们将区间[Pi,Pi]反转(单个物品). 输入示例 6 3 4 5 1 6 2 输出示例 4 6 4 5 6 6 数据规模及约定 见"输入" 题解 暴力

PROC SORT

PROC SORT DATA=输入数据集 <OUT=输出数据集><选项>; BY 关键变量; RUN; PROC SORT 语法如上,其中在尖括号中的可以不出现,也不会报错. 选项中常用的有两种NODUPKEY和NOUNIQUEKEY. 功能可以由字面意思帮助记忆,NO-没有,DUP-重复,KEY-关键变量,,,合起来就是数据集中指定的关键变量不重复, 其功能也一样,,去除重复的关键变量,这里的关键变量就是指跟在关键字BY后面的变量:还有一个对应的DUPOUT=选项用来输出被该(N

PAT甲题题解-1101. Quick Sort (25)-大水题

快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着循环一次,统计出代码中的minnum和maxnum即可,注意最后一定要输出'\n',不然第三个测试会显示PE,格式错误. #include <iostream> #include <cstdio> #include <algorithm> #include <map&

八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

使用 redis (sort set排序集合类型操作)

sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子(回复量)信息: select * from message order by backnum desc limit 5; // 利用 sort set 实现最热门的前 5 贴信息 帖子id            回复量(万条) 11                102        12     

Wiggle Sort II

Wiggle Sort II Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3].... 注意事项 You may assume all input has valid answer. 样例 Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6]. Given nums

sort排序

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>sort排序</title> </head> <body> <script type="text/javascript"> var arr = [3,1,0,7,6,5,4,9]; document.write("原数组:"