原创 劍指offer全集詳解python版——二叉樹中和爲某一值的路徑

題目描述: 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 思路: 非常明顯的

原创 劍指offer全集詳解python版——和爲S的連續正數序列

題目描述: 找出所有和爲S的連續正數序列。 思路: 雙指針。 代碼 # -*- coding:utf-8 -*- class Solution: def FindContinuousSequence(self, ts

原创 劍指offer全集詳解python版——數組中的逆序對

題目描述: 在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007 思路:

原创 劍指offer全集詳解python版——連續子數組的最大和

題目描述: 給一個數組,返回它的最大連續子序列的和 思路: 有個最優子結構性質:DP[i] = max{DP[i-1] + A[i],A[i]}。能第一眼看出還是有些本事。 代碼: # -*- coding:utf-8 -*

原创 劍指offer全集詳解python版——整數中1出現的次數

題目描述: 求出任意非負整數區間中1出現的次數(從1 到 n 中1出現的次數)。 思路: 貼一個我覺得最優雅的解法,比劍指offer書的解法要好。 代碼: # -*- coding:utf-8 -*- class Solut

原创 劍指offer全集詳解python版——字符串的排列

題目描述: 輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。 思路: 經典的回溯法。 代碼: #

原创 劍指offer全集詳解python版——最小的K個數

題目描述: 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 思路: 非常經典的題,一般是兩種思路,快排或者堆(堆甚至有API)。 代碼: # -*-

原创 劍指offer全集詳解python版——二叉搜索樹的後序遍歷序列

題目描述: 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 思路: 已知條件:後序序列最後一個值爲root;二叉搜索樹左子樹值都比r

原创 劍指offer全集詳解python版——二叉搜索樹的第k個結點

題目描述: 給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值爲4。 思路: 利用中序遍歷。 代碼: # -*- coding:utf-8 -*-

原创 劍指offer全集詳解python版——數組中只出現一次的數字

題目描述: 一個整型數組裏除了兩個數字之外,其他的數字都出現了偶數次。請寫程序找出這兩個只出現一次的數字。 思路: 首先我們考慮這個問題的一個簡單版本:一個數組裏除了一個數字之外,其他的數字都出現了兩次。請寫程序找出這個只出

原创 劍指offer全集詳解python版——平衡二叉樹

題目描述: 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 思路: 利用後序求深度,可以避免重複求深度。 代碼 # -*- coding:utf-8 -*- # class TreeNode: # def __init

原创 劍指offer全集詳解python版——數字在排序數組中出現的次數

題目描述: 統計一個數字在排序數組中出現的次數。 思路: 利用二分法尋找左右端點。 代碼: 代碼 # -*- coding:utf-8 -*- class Solution: def GetNumberOfK(sel

原创 劍指offer全集詳解python版——第一個只出現一次的字符

題目描述: 在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 如果沒有則返回 -1(需要區分大小寫). 思路: 開字典就可以了。 代碼: # -*- coding:

原创 劍指offer全集詳解python版——把數組排成最小的數

題目描述: 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。 思路: 只需注意一點,兩個數字誰排

原创 劍指offer全集詳解python版——數組中出現次數超過一半的數字

題目描述: 數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。 思