原创 算法2:用python實現鏈表的正序和反序輸出

#node這是節點類 class Node():     #初始化函數     def __init__(self,value=None,next = None):         self._value = value        

原创 算法5:輸出二叉樹任意一個結點在中序遍歷情況下的下一個節點值

#建立一個二叉樹 #聲明一個二叉樹節點類 #節點中包括:節點值,節點左子樹根節點,節點右子樹根節點,節點父節點 class TreeNode():     def __init__(self,value=None,leftNode=Non

原创 算法1:從一個有序二維數組中查找目標值

import numpy as np #這裏是從一個有序二維數組中(從左到右遞增,從上到下遞增)查找一個數字 #要求的時間複雜度是O(m+n) #這就要求不能用循環了 #非常機敏的方法是數組從右上角查找,若其大於目標數值,則向左走 #表

原创 算法3:由二叉樹的前序遍歷序列和中序遍歷序列重建二叉樹

import numpy as np #重建二叉樹 #二叉樹的前序遍歷 preorder =  [3,9,20,15,7] #二叉樹的中序遍歷 inorder =  [9,3,15,20,7] #定義的臨時變量,爲了得到二叉樹中節點個數

原创 算法6:用兩個棧實現隊列模擬

#定義將數據輸入隊列中的操作 #利用一個棧來存儲隊列中的值 #stack1作爲數據輸入存儲的棧 def PushDataToStack(element):     stack1.append(element) #定義將數據從隊列中輸出的

原创 算法4:用python實現前序中序後續遍歷二叉樹

#建立一個二叉樹 #聲明一個二叉樹節點類 #節點中包括:節點值,節點左子樹根節點,節點右子樹根節點,節點父節點 class TreeNode():     def __init__(self,value=None,leftNode=Non

原创 用python建立任意二叉樹

#建立一個二叉樹 #聲明一個二叉樹節點類 #節點中包括:節點值,節點左子樹根節點,節點右子樹根節點,節點父節點 class TreeNode():     def __init__(self,value=None,leftNode=Non

原创 算法12.求給定目標值和子元素集合情況下,子元素和爲目標值的組合詳細情況

     //這個算法的求解目標:給定一個集合,同時給定一個目標值。找出集合中有多少種組合,它們的和     //都是目標值(逆向思考:即將目標值可以分界爲只包含給定集合中元素的幾種組合情況)。 //輔助函數 int nSum(const

原创 算法13:接雨水方法,一排凹槽可以裝多少雨水

    //“接雨水”算法:     //vNums中數字代表一系列相鄰並排的水槽     //如索引號爲"0"和"1"的數字0和1代表這一水槽只有右邊,即該水槽無法接到雨水     //而索引號從"1"到"3"的水槽可以接到1個單位的水

原创 給定參加排列的元素數,得到這些不同元素的排列情況

//1.排列函數 //這個函數作用是返回所給個數的數字的排列組合 //算法思想:求取n個不同數值的排列,最終每個排列中含有n個不同數字(此處用索引號代替) //先思考1個數字的排列怎麼求?只有一種方式:0 //再思考2個數字的排列怎麼求?

原创 算法11:判斷一個二維字符矩陣中是否包含有一條字符串所含字符組成的路徑

#算法11;判斷一個二維矩陣中是否有一個字符串,它通過一個每個格點有且僅一次,不能重複通過 #這裏定義的是搜索的四個方向 # x + 0, y - 1 ->向"上"搜索 # x + 0, y + 1 ->向"下"搜索 # x - 1, y

原创 算法10:從一個非遞減數組的旋轉數組中找其最小元素值

#算法:求取一個旋轉數組的最小元素 #旋轉數組定義:一個數組中若干元素移到數組的末尾,稱之爲數組的旋轉 #例:array = [1,2,3,4];數組的一個旋轉爲:array = [3,4,1,2] #移動若干元素,若干包括1個,2個,3

原创 算法9:"變態"跳臺階

#題目:變態跳臺階(出題的人就是個變態,人家這是牛人)->一次可以跳任意臺階數,如一次跳1個臺階,2個臺階,3個臺階。。。 #因此,如果我們想要這個"變態"跳到第n個臺階的話,它有: #"變態"跳到臺階1的跳法+"變態"跳到臺階2的跳法+

原创 算法7:求用小矩形覆蓋大矩形有多少種方式

#矩形覆蓋算法: #用2*1的小矩形去覆蓋2*n的大矩形,要求無重疊 #求取總共有多少種方法? #這個大矩形形狀是2*n #限定了矩形只有兩行 #所以覆蓋方法有兩種覆蓋方式: #1、先用2*1條塊覆蓋,再覆蓋剩下的2*(n-1)的大矩形;

原创 算法8:青蛙跳臺階有幾種方式

#青蛙跳臺階 #一隻青蛙一次只能跳一級或者二級臺階,求若臺階爲n,青蛙有幾種跳法? #這個問題和矩形覆蓋問題類似,也是由兩種情況開始。 #矩形覆蓋是:要麼你先用2*1的矩形覆蓋,要麼你用1*2的矩形覆蓋。 #然後剩餘的問題又是一個大矩形的