原创 ubuntu18.04安裝JDK14

下載JDK14 鏈接:https://pan.baidu.com/s/1eb37CvB0xVwzD9H6qLmmYQ 提取碼:v3r5 解壓。我解壓後拷貝到了/usr/local下 修改/etc/profile,在末尾增加下面幾

原创 C++堆排的一種實現

思路 堆排分兩步,第一步是建立堆,第二步是進行堆排序。 堆的一些基本概念: 堆的邏輯表現方式是一顆完全二叉樹。用一個數組保存元素,第一個數代表根節點,index爲0。尾元素的index爲nnn,表示最後一個葉子節點。 對於任何

原创 141. 環形鏈表

題目 給定一個鏈表,判斷鏈表中是否有環。 爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。 示例1 輸入:head = [3,2,0,

原创 139. 單詞拆分

題目 給定一個非空字符串 s 和一個包含非空單詞列表的字典 wordDict,判定 s 是否可以被空格拆分爲一個或多個在字典中出現的單詞。 說明 拆分時可以重複使用字典中的單詞。 你可以假設字典中沒有重複的單詞。 示例1 輸入

原创 70. 爬樓梯

題目 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個正整數。 示例1 輸入: 2 輸出: 2 解釋: 有兩種方法可以爬到樓頂。 1.

原创 79. 單詞搜索

題目 給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。 示例 board =

原创 64. 最小路徑和

題目 給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和爲最小。 說明:每次只能向下或者向右移動一步。 示例 輸入: [ [1,3,1], [1,5,1], [4,2,1] ] 輸出:

原创 56. 合併區間

題目 給出一個區間的集合,請合併所有重疊的區間。 示例1 輸入: [[1,3],[2,6],[8,10],[15,18]] 輸出: [[1,6],[8,10],[15,18]] 解釋: 區間 [1,3] 和 [2,6] 重疊, 將

原创 55. 跳躍遊戲

題目 給定一個非負整數數組,你最初位於數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 示例1 輸入: [2,3,1,1,4] 輸出: true 解釋: 我們可以先跳 1 步

原创 3.18 矩形重疊

題目 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 爲左下角的座標,(x2, y2) 是右上角的座標。 如果相交的面積爲正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。 給

原创 3.14 最長上升子序列

題目 給定一個無序的整數數組,找到其中最長上升子序列的長度。 示例 輸入: [10,9,2,5,3,7,101,18] 輸出: 4 解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。 思路一 O(n2)O(

原创 3.13 多數元素

題目 給定一個大小爲 n 的數組,找到其中的多數元素。多數元素是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。 你可以假設數組是非空的,並且給定的數組總是存在多數元素。 示例1 輸入: [3,2,3] 輸出: 3 示例2 輸入

原创 3.15 島嶼的最大面積

題目 給定一個包含了一些 0 和 1的非空二維數組 grid , 一個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍着。 找到給定的二維數組中最大的島嶼面積。(如果沒

原创 34. 在排序數組中查找元素的第一個和最後一個位置

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

原创 32. 最長有效括號

題目 給定一個只包含 ‘(’ 和 ‘)’ 的字符串,找出最長的包含有效括號的子串的長度。 示例1 輸入: "(()" 輸出: 2 解釋: 最長有效括號子串爲 "()" 示例2 輸入: ")()())" 輸出: 4 解釋: 最長有