原创 從上到下打印二叉樹(二叉樹層序遍歷)

題目: 從上到下打印出二叉樹的每一個節點,同一層的節點按照從左到右的順序打印。如下打印出來的結果爲[3, 9, 20, 16, 15, 7]。 3 / \ 9 20 / / \ 16 15 7

原创 二叉樹搜索樹的最近公共祖先

題目: 給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 例如,給定如下二叉搜索樹: root = [6, 2, 8, 0, 4, 7, 9, null, null, 3, 5] 輸入: root = [6,2,8,

原创 禮物的最大價值(一維動態規劃&二維動態規劃)

題目: 在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多

原创 構建乘除數組

題目: 給定一個數組 A[0,1,…,n-1],請構建一個數組 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 輸入: [1, 2, 3

原创 數組中兩個數只出現一次

題目: 一個整型數組裏除兩個數字之外,其他數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。 解析: 利用位運算的異或關係求解,把兩個只出現一次的數分別放入兩個數組中(有出現兩次

原创 二叉樹的深度(DFS)

題目: 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度爲樹的深度。 解析: 遞歸,深度遍歷(dfs)。 參考答案: /*** * struct TreeNode

原创 字符串消除-2020七牛雲春

1. 題目: 給定一個只包含大寫英文字母的字符串s,按照以下規則消除: (1)如果s包含長度爲2的由相同字母組成的子串,那麼這些子串會被消除,餘下的子串拼成新的字符串。 例如"ABCCBCCCAA"中"CC",“CC"和"AA"會

原创 實現一個單鏈表

#include <iostream> #include <cstdlib> using namespace std; typedef struct node{ int data; struct node* next; }N

原创 青蛙跳臺階(一維的動態規劃)

題目: 一隻青蛙一次可以跳一級臺階,也可以跳兩級臺階,求青蛙跳上一個n級臺階有多少種跳法。 解析: 利用動態規劃進行求解,首先介紹動態規劃解題三要素: (1)定義數組元素的含義 首先定義dp[i]的含義,要求跳上n級臺階有多少種

原创 不同路徑(二維數組的動態規劃)LeetCode #62

題目: 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。 問總共有多少條不同的路徑? 解

原创 最長遞增子序列 (動態規劃)

題目: 給定一個無序的整數數組,找到其中最長上升序列的長度。 輸入: [10, 9, 2, 5, 3,7, 101, 18] 輸出: 4 //最長的上升子序列是[2, 3, 7, 101], 它的長度是4. 解析: 先

原创 最小路徑和(二維的動態規劃) LeetCode #64

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

原创 c++實現一個棧

棧的模版 #ifndef __ARRAY_STACK_H__ #define __ARRAY_STACK_H__ #include <iostream> using namespace std; template<cla

原创 學生成績排名系統(c++實現)

題目:學生有兩門課語文和數學,實現一個班級名次排名,要求總分高的排在前面,當總分相同時,數學成績高的在前面,若兩門課程均相等時,按姓名拼音排序。 輸入(第一行輸入 幾個學生,第二行輸入學生姓名,語文成績,數學成績) 3

原创 羅馬數字轉阿拉伯數字

#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define N 7 char digits[N] = {'I',