1. 程式人生 > >LeetCode刷題指南之排序篇--快速排序

LeetCode刷題指南之排序篇--快速排序

//寫法一
class Resulotion{
public:
void quickSort(vector<int> &arr, int left, int right){
if (left >= right) return;
int p = partition(arr, left, right);
quickSort(arr, left, p - 1);
quickSort(arr, p + 1, right);
}
int partition(vector<int> &arr, int left, int right){

int e = arr[left];
//element: [left+1, j]<v  [j+1, i]>v
int j = left, i = left + 1;
for (i; i <= right; i++){
if (arr[i] < e)
swap(arr[++j], arr[i]);
}
swap(arr[left], arr[j]);
return j;
}
};
//寫法二
int partition(vector<int> &arr, int left, int right){
int v = arr[left];

//[left+1,j] < v,  v < [j+1, i]
int j = left;
for (int i = left + 1; i <= right; i++){
if (arr[i] < v)
swap(arr[++j], arr[i]);
}
swap(arr[left], arr[j]);
return j;
}

void _quickSort(vector<int> &arr, int left, int right){
if (left >= right) return;

int p = partition(arr, left, right);
_quickSort(arr, left, p - 1);
_quickSort(arr, p + 1, right);
}

void quickSort(vector<int> &arr){
_quickSort(arr, 0, arr.size() - 1);
}


相關推薦

LeetCode指南排序--快速排序

//寫法一 class Resulotion{ public: void quickSort(vector<int> &arr, int left, int right){ if (

leetcode系列817. 連結串列元件

給定一個連結串列(連結串列結點包含一個整型值)的頭結點 head。 同時給定列表 G,該列表是上述連結串列中整型值的一個子集。 返回列表 G 中元件的個數,這裡對元件的定義為:連結串列中一段最長連續

leetcode日記驗證二叉搜尋樹

題目: 給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。 一個二叉搜尋樹有如下定義: 左子樹只包含小於當前節點的數。 右子樹只包含大於當前節點的數。 所有子樹自身必須也是二叉搜尋樹。 示例 1: 2 / \ 1 3 二叉樹[

LeetCode 指南(一):為什麼要

雖然刷題一直飽受詬病,不過不可否認刷題確實能鍛鍊我們的程式設計能力,相信每個認真刷題的人都會有體會。現在提供線上程式設計評測的平臺有很多,比較有名的有 hihocoder,LintCode,以及這裡我們關注的 LeetCode。 程式碼提交曲線 LeetCode

LeetCode指南

以下是我個人做題過程中的一些體會: 1. LeetCode的題庫越來越大,截止到目前,已經有321個問題了。對於大多數人來說,沒有時間也沒有必要把所有題目都做一遍(時間充裕可以隨意)。刷個100題左右應該就差不多了(可以考慮序號為前100多的題目,相對更經典一點)。 2. 從

LeetCode指南(Java版)

這位大俠,這是我的公眾號:程式設計師江湖。 分享程式設計師面試與技術的那些事。 乾貨滿滿,關注就送。 參考@CyC2018的leetcode題解。Java工程師LeetCode刷題必備。主要根據LeetCode的tag進行模組劃分,每部分都選取了比較經典

leetcode 指南

說明: leetcode 有中英兩版,個人喜歡中文版;雖然英文版的貌似逼格更高,但是畢竟咱們就是衝這刷著爽的感覺去的。 1. leetcode的輸入輸出方式 注意:在leetcode裡面輸入輸出方式是它給定的類裡面的函式,你只要負責寫函式內部就行了;至於輸入不用你自己寫

LeetCode 筆記 全排列 in Java

題目如下:Given a collection of distinct integers, return all possible permutations.Example:Input: [1,2,3]

leetcode筆記-topological sort拓撲排序(DFS)

207. Course Schedule 找環 There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prerequisites, for

LeetCode總結雙指標法

Leetcode刷題總結 目前已經刷了50道題,從零開始刷題學到了很多精妙的解法和深刻的思想,因此想按方法對寫過的題做一個總結 雙指標法 雙指標法有時也叫快慢指標,在數組裡是用兩個整型值代表下標,在連結串列裡是兩個指標,一般能實現O(n)的時間解決問題,兩個指標的位置一般在第一個元素和第二個元素或者第一個元素

LeetCode總結-遞迴

       遞迴是演算法學習中很基本也很常用的一種方法,但是對於初學者來說比較難以理解(PS:難點在於不斷呼叫自身,產生多個返回值,理不清其返回值的具體順序,以及最終的返回值到底是哪一個?)。因此,本文將選擇LeetCode中一些比較經典的習題,通過簡單測試例項,具體

LeetCodeEASY如何快速反轉一個字串

題目 Write a function that takes a string as input and returns the string reversed. Example 1: Input: "hello" Output: "olleh" Example 2

leetcodeEASY什麼是尾部遞迴

Consider a simple function that adds the first N integers. (e.g. sum(5) = 1 + 2 + 3 + 4 + 5 = 15). Here is a simple JavaScript implementa

leetcode 路 68 Gas Station

rom 說明 之路 bsp margin tom otto mono lee There are N gas stations along a circular route, where the amount of gas at station i is gas[i]

leetcode 字符串反轉

solution arr reverse eof HA rev code toc val 請編寫一個函數,其功能是將輸入的字符串反轉過來。 示例: 輸入:s = "hello" 返回:"olleh" 註:這裏之所以不使用倒敘遍歷strs,是因為字符串拼接的效率很低,str+

C#LeetCode記錄:從排序陣列中刪除重複項

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2,

C#LeetCode#374-猜數字大小(Guess Number Higher or Lower)

問題 我們正在玩一個猜數字遊戲。 遊戲規則如下: 我從 1 到 n 選擇一個數字。 你需要猜我選擇了哪個數字。 每次你猜錯了,我會告訴你這個數字是大了還是小了。 你呼叫一個預先定義好的介面 guess(int num),它會返回 3 個可能的結果(-1,1 或 0): -1 :

C#LeetCode#704-二分查詢(Binary Search)

問題 給定一個 n 個元素有序的(升序)整型陣列 nums 和一個目標值 target  ,寫一個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。 輸入: nums = [-1,0,3,5,9,12], target = 9 輸出:

C#LeetCode#278-第一個錯誤的版本(First Bad Version)

問題 你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。 假設你有 n 個版本 [1, 2, ..., n],你想找出導致之後所有版本出錯的第一個錯誤的版本。 你可

C#LeetCode#824-山羊拉丁文(Goat Latin)

問題 給定一個由空格分割單詞的句子 S。每個單詞只包含大寫或小寫字母。 我們要將句子轉換為 “Goat Latin”(一種類似於 豬拉丁文 - Pig Latin 的虛構語言)。 山羊拉丁文的規則如下: 如果單詞以母音開頭(a, e, i, o, u),在單詞後新增"ma"。 例