leetcode shuffle演算法
// 原始的洗牌演算法,遍歷陣列,每次隨機一個,刪除,再隨機 // 時間複雜度O(n2) func shuffle(source []int) []int { result := make([]int, 0) for len(source) > 0 { j := rand.Intn(len(source)) result = append(result, source[j]) source = append(source[0:j], source[j+1:]...) } return result } // 原始的洗牌演算法的變種,遍歷陣列,每次隨機一個,將隨機出來的值與陣列最後一個值交換,在原始陣列上做替換 // 時間複雜度O(n) func shuffle2(source []int) []int { length := len(source) for i := 0; i < length; i++ { j := rand.Intn(length - i) source[j], source[length-1-i] = source[length-1-i], source[j] } return source }
相關推薦
leetcode shuffle演算法
// 原始的洗牌演算法,遍歷陣列,每次隨機一個,刪除,再隨機 // 時間複雜度O(n2) func shuffle(source []int) []int { result := make([]int, 0) for len(source) > 0 { j := rand.Intn(l
LeetCode初級演算法
目錄 1.陣列 2.字串 3.連結串列 4.樹 5.排序和搜尋 6.動態規劃 7.設計問題 8.數學 9.其他 1.陣列 1.1 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列
Leetcode-貪心演算法
貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。 也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。 455. 分發餅乾 題目連結 思路 這道題目給了我們兩組array,一組代表小朋友的胃口值,另一組代表曲
leetcode——中級演算法——陣列和字串——無重複字元的最長字串
給定一個字串,找出不含有重複字元的最長子串的長度。 示例1 輸入: "abcabcbb" 輸出: 3 解釋: 無重複字元的最長子串是 "abc",其長度為 3 示例2 輸入: "bbbbb" 輸出: 1 解釋: 無重複字元的最長子串是 "b",其長度為 1。 示例3
LeetCode——中級演算法——樹和圖——二叉樹的鋸齒形層序遍歷(JavaScript)
給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。 例如: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回鋸
LeetCode——中級演算法——陣列和字串——三數之和
給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4], 滿足
leetcode--中級演算法--陣列和字串--遞增的三元子序列(JavaScript)
給定一個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子序列。 數學表示式如下: 如果存在這樣的 i, j, k, 且滿足 0 ≤ i < j < k ≤ n-1, 使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否則返回
leetcode-中級演算法-陣列和字串-最長迴文字串
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” 思路 這道題很顯然可以用暴力求解,但時
C++ Leetcode初級演算法之數學
1.計數質數 統計所有小於非負整數 n 的質數的數量。 示例: 輸入: 10 輸出: 4 解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。 class Solution { public: int countPrimes(int n) {
C++ Leetcode初級演算法之動態規劃篇
1.爬樓梯 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個正整數。 示例 1: 輸入: 2 輸出: 2 解釋: 有兩種方法可以爬到樓頂。 1.1 階 + 1 階 2.2 階 示
C++ Leetcode初級演算法之排序和搜尋
1.合併兩個有序陣列 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於
C++ Leetcode初級演算法之連結串列篇
1. 刪除連結串列中的節點 請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 – head = [4,5,1,9],它可以表示為: 4 -> 5 -> 1 -> 9 示例 1: 輸入: h
C++ Leetcode初級演算法之最長公共字首
編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 “”。 示例 1: 輸入: [“flower”,“flow”,“flight”] 輸出: “fl” 示例 2: 輸入: [“dog”,“racecar”,“car”] 輸出: “” 解釋: 輸入不存
C++ Leetcode初級演算法之報數
報數序列是一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下: 1 11 21 1211 111221 1 被讀作 “one 1” (“一個一”) , 即 11。 11 被讀作 “two 1s”
C++ Leetcode初級演算法之實現strStr()
實現 strStr() 函式。 給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)。如果不存在,則返回 -1。 示例 1: 輸入: haystack = “hello”, needle =
C++ Leetcode初級演算法之驗證迴文字串
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。 說明:本題中,我們將空字串定義為有效的迴文串。 示例 1: 輸入: “A man, a plan, a canal: Panama” 輸出: true 示例 2: 輸入: “race a car”
C++ Leetcode初級演算法之有效的字母異位詞
給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的一個字母異位詞。 示例 1: 輸入: s = “anagram”, t = “nagaram” 輸出: true 示例 2: 輸入: s = “rat”, t = “car” 輸出: false 說明: 你可以假設
C++ Leetcode初級演算法之字串中的第一個唯一字元
給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = “leetcode” 返回 0. s = “loveleetcode”, 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 class Solution { pub
C++ Leetcode初級演算法之整數反轉
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸出: 21 注意: 假設我們的環境只能儲存得下 32 位的有符號整數,則其數
C++ Leetcode初級演算法之反轉字串
編寫一個函式,其作用是將輸入的字串反轉過來。 示例 1: 輸入: “hello” 輸出: “olleh” 示例 2: 輸入: “A man, a plan, a canal: Panama” 輸出: “amanaP :lanac a ,nalp a ,nam A” class