原创 排序算法之選擇排序、冒泡排序、快速排序(C#)

打算學習一下排序算法,記錄一下方便以後複習。首先介紹一下不同種類的排序算法的複雜度 排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 冒泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n

原创 LeetCode(中等)長度最小的子數組(c#)

題目爲 給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組,並返回其長度。如果不存在符合條件的連續子數組,返回 0。 注意 題目中的連續子數組爲數組中的連續,而不是將數組排序

原创 LeetCode(困難)串聯所有單詞的子串(c#)

題目爲 給定一個字符串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。 注意子串要與 words 中的單詞完全匹配,中間不能有其他字符,但不需要考慮 words 中單

原创 LeetCode(中等)最長重複子數組(c#)

題目爲 給兩個整數數組 A 和 B ,返回兩個數組中公共的、長度最長的子數組的長度。 第一種解法,暴力算法, 時間複雜度N^3。此解法leetcode會超時。但邏輯沒有問題,c#代碼如下 public int FindLengt

原创 LeetCode(中等)不同路徑II(c#)

題目爲 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。 現在考慮網格中有障礙物。那麼從左

原创 LeetCode(困難)缺失的第一個正數(c#)

題目爲 給你一個未排序的整數數組,請你找出其中沒有出現的最小的正整數。 思路爲轉換爲list集合,排序加去重,循環判斷是否爲正數最小,代碼爲 public int FirstMissingPositive(int[] nums)

原创 LeetCode(簡單)移除重複節點(c#)

題目爲 編寫代碼,移除未排序鏈表中的重複節點。保留最開始出現的節點。 思路爲根據鍵值對判斷是否重複,記錄上一個節點,如果重複,則將節點的下一節點設置爲空,直至不重複爲止。代碼如下 public ListNode Remove

原创 排序算法之插入排序、希爾排序、歸併排序(C#)

插入排序 兩次for循環,外層從數組第二位i=1開始,內層for循環由i向前進行判斷,大於則將該位置與遍歷位置交換。此時注意,不能按i的位置獲取元素,應將該元素暫存,因爲交換時對應i位置元素值會變換。 c#代碼如下 ///

原创 排序算法之堆排序(C#)

堆排序 所謂堆排序,就是將數組元素組成一個包含左右子節點的樹,與之前使用的結構(如下所示相同) public class TreeNode { public int val; public

原创 LeetCode(困難)最長有效括號(c#)

題目爲 給定一個只包含 ‘(’ 和 ‘)’ 的字符串,找出最長的包含有效括號的子串的長度。 思路參考官方題解 方法 3:棧 官方題解鏈接地址 public int LongestValidParentheses(string

原创 多線程學習筆記之線程同步

1、爲多個線程共享的變量提供原子操作。Interlocked public static class Interlocked 2、互斥鎖Mutex 限制只能有一個訪問 Mutex m = new Mutex();

原创 LeetCode(中等)模式匹配(c#)

題目爲 你有兩個字符串,即pattern和value。 pattern字符串由字母"a"和"b"組成,用於描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b

原创 LeetCode(困難)二叉樹中的最大路徑和(c#)

題目爲 給定一個非空二叉樹,返回其最大路徑和。 本題中,路徑被定義爲一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含一個節點,且不一定經過根節點。 這道題首先描述的意思是以當前節點爲路徑中的一點,在整個樹中選擇一條路徑

原创 LeetCode(中等)整數轉羅馬數字(c#)

題目爲 羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。 字符 數值 I 1 V 5 X 10 L

原创 LeetCode(中等)最接近的三數之和(c#)

題目爲 給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 示例: 輸入:nums = [-1