在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。排序(sorting)是計算機程式設計中的一種重要操作,它的功能是將乙個資料元素(或記錄)的任意序列,重新排列成乙個按關鍵字有序的序列。輸入: 4->2->1->3
輸出: 1->2->3->4
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
由於排序過程中涉及到的儲存器不同,可以將排序方法分為兩大類:內部排序和外部排序。
按排序過程中依據的不同原則對內部排序方法進行分類:插入排序、交換排序、選擇排序、歸併排序和計數排序等。
按排序過程中所需的工作量對內部排序方法進行分類:
1.簡單的排序方法,時間複雜度o(n^2)
2.先進的排序方法,時間複雜度o(nlogn)
3.基數的排序方法,時間複雜度o(d*n)
class
solution
// 帶頭結點的鍊錶快速排序
private listnode quicksort
(listnode head,listnode end)
else
}// 合併臨時鍊錶和原鍊錶,將原鍊錶接到臨時鍊錶後面即可
tp.next=head.next;
// 將臨時鍊錶插回原鍊錶,注意是插回!(不做這一步在對右半部分處理時就斷鏈了)
head.next=tmphead.next;
quicksort
(head,partition)
;quicksort
(partition,end)
;// 題目要求不帶頭節點,返回結果時去除
return head.next;
}}
class
solution}}
return nums[k-1]
;//直接呼叫api
// 對右半部分進行歸併排序
right =
mergesort
(slow.next)
;// 鍊錶判斷結束的標誌:末尾節點.next==null
slow.next = null;
// 對左半部分進行歸併排序
left =
mergesort
(head)
;return
mergelist
(left,right);}
private listnode mergelist
(listnode left,listnode right)
else
t = t.next;
} t.next= left==null?right:left;
return temph.next;
}}
LeetCode 到最近的人的最大距離
在一排座位 seats 中,1 代表有人坐在座位上,0 代表座位上是空的。至少有乙個空座位,且至少有一人坐在座位上。亞歷克斯希望坐在乙個能夠使他與離他最近的人之間的距離達到最大化的座位上。返回他到離他最近的人的最大距離。示例 1 輸入 1,0,0,0,1,0,1 輸出 2 解釋 如果亞歷克斯坐在第二...
leetcode 849 到最近的人的最大距離
在一排座位 seats 中,1 代表有人坐在座位上,0 代表座位上是空的。至少有乙個空座位,且至少有一人坐在座位上。亞歷克斯希望坐在乙個能夠使他與離他最近的人之間的距離達到最大化的座位上。返回他到離他最近的人的最大距離。示例 1 輸入 1,0,0,0,1,0,1 輸出 2 解釋 如果亞歷克斯坐在第二...
Leetcode 129 求根到葉子節點數字之和
給定乙個二叉樹,它的每個結點都存放乙個0 9的數字,每條從根到葉子節點的路徑都代表乙個數字。例如,從根到葉子節點路徑1 2 3代表數字123。計算從根到葉子節點生成的所有數字之和。說明 葉子節點是指沒有子節點的節點。示例 1 輸入 1,2,3 1 2 3輸出 25解釋 從根到葉子節點路徑 1 2代表...