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中一些比較經典的習題,通過簡單測試例項,具體
LeetCode刷題EASY篇如何快速反轉一個字串
題目 Write a function that takes a string as input and returns the string reversed. Example 1: Input: "hello" Output: "olleh" Example 2
leetcode刷題之EASY篇什麼是尾部遞迴
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"。 例