原创 數據結構與算法 三元組順序對矩陣轉置(稀疏數組的壓縮、三元組轉置)Java實現

三元組順序對矩陣轉置 步驟: 構造一個三元組,i,j,data 輸入一個二維矩陣 將二維矩陣轉成三元組 一個num數組,存每一列的非0元素的個數 一個cpot數組,存每一列第一個每0元素在new_triple中的位置 用一個fo

原创 Java實現 LeetCode 面試題64.求1+2+...+n(遞歸)

求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 示例 1: 輸入: n = 3 輸出: 6 示例 2: 輸入: n = 9 輸出: 45

原创 Java實現 LeetCode 128.最長連續序列(哈希表)

給定一個未排序的整數數組,找出最長連續序列的長度。 要求算法的時間複雜度爲 O(n)。 示例: 輸入: [100, 4, 200, 1, 3, 2] 輸出: 4 解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。

原创 Java實現 LeetCode 1431.擁有最多糖果的孩子

給你一個數組 candies 和一個整數 extraCandies ,其中 candies[i] 代表第 i 個孩子擁有的糖果數目。 對每一個孩子,檢查是否存在一種方案,將額外的 extraCandies 個糖果分配給孩子們之後,

原创 Java實現 LeetCode 110.平衡二叉樹

給定一個二叉樹,判斷它是否是高度平衡的二叉樹。 本題中,一棵高度平衡二叉樹定義爲: 一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。 示例 1: 給定二叉樹 [3,9,20,null,null,15,7] 3 /

原创 數據結構 鏈表實現插入、刪除(Java)

package 鏈表; import java.util.Scanner; public class 鏈表 { public static void main(String[] args) { ListNode hea

原创 Java實現 LeetCode 76.最小覆蓋子串(滑動窗口)

給你一個字符串 S、一個字符串 T,請在字符串 S 裏面找出:包含 T 所有字符的最小子串。 示例: 輸入: S = “ADOBECODEBANC”, T = “ABC” 輸出: “BANC” 說明: 如果 S 中不存這樣的子串,

原创 Java實現 LeetCode 34.在排序數組中查找元素的第一個和最後一個位置(雙指針)

給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。 你的算法時間複雜度必須是 O(log n) 級別。 如果數組中不存在目標值,返回 [-1, -1]。 示例 1:

原创 Java實現 LeetCode 332.重新安排行程(dfs)

給定一個機票的字符串二維數組 [from, to],子數組中的兩個成員分別表示飛機出發和降落的機場地點,對該行程進行重新規劃排序。所有這些機票都屬於一個從JFK(肯尼迪國際機場)出發的先生,所以該行程必須從 JFK 出發。 說明:

原创 Java實現 LeetCode 152.乘積最大子數組(動態規劃)

給你一個整數數組 nums ,請你找出數組中乘積最大的連續子數組(該子數組中至少包含一個數字),並返回該子數組所對應的乘積。 示例 1: 輸入: [2,3,-2,4] 輸出: 6 解釋: 子數組 [2,3] 有最大乘積 6。 示例

原创 Java實現 LeetCode 680.驗證迴文字符串II

給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。 示例 1: 輸入: “aba” 輸出: True 示例 2: 輸入: “abca” 輸出: True 解釋: 你可以刪除c字符。 注意: 字符串只包含從 a-z

原创 Java實現 LeetCode 1334.閾值距離內鄰居最少的城市(Floyd算法)

有 n 個城市,按從 0 到 n-1 編號。給你一個邊數組 edges,其中 edges[i] = [fromi, toi, weighti] 代表 fromi 和 toi 兩個城市之間的雙向加權邊,距離閾值是一個整數 dista

原创 圖的創建+鄰接矩陣(Java實現)

照着這個視頻中老師講解的代碼打的 (鏈接) package com.algorithms.graph; import java.util.ArrayList; import java.util.Arrays; public c

原创 最小生成樹 Prim算法和Kuskal算法(Java實現)

照着這個視頻中老師的代碼打了一遍 Prim算法:由頂點確定邊。(鏈接) 簡述一下算法思想:從圖中的任意一個頂點開始,選擇與它相連的權值最小的一條邊,並且還要判斷這條邊是否構成了迴路。下一輪的選擇是判斷所有已經選中的結點中與它們相鄰

原创 Java實現 LeetCode 136.只出現一次的數字

給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1: 輸入: [2,2,1] 輸出: 1 示例