原创 排序3-堆排序

基本思想 堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以看作是對選擇排序的改進。 通常堆

原创 【面試題】-二叉樹

二叉樹的結點個數 1、如果二叉樹爲空,節點個數爲0 2、不爲空,節點個數 = 左子樹節點個數 + 右子樹節點個數 + 1 /* 二叉樹的節點個數 1、如果二叉樹爲空,節點個數爲0 2、不爲空,節點個數 = 左子樹節點個數 + 右

原创 Markdown 編輯數學公式的參照模板

下面是一個公式,圖片格式的,維基百科上的。 Markdown的格式如下: \frac{1}{\pi}=\frac{2\sqrt{2}}{9801}\sum_{k=0}^\infty\frac{(4k)!(1103+26390k

原创 【面試題】二叉搜索樹轉換雙向鏈表

題目描述 輸入一棵二叉搜索樹,現在要將該二叉搜索樹轉換成一個排序的雙向鏈表。而且在轉換的過程中,不能創建任何新的結點,只能調整樹中的結點指針的指向來實現。 二叉搜索樹,左子結點的值總是小於父結點的值,右子結點的值總是大於父結

原创 散列表-開放地址法和鏈地址法的實現

基本定義 散列技術是在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關係 f,使得每個關鍵字key對應一個存儲位置f(key)。這種對應關係f稱爲散列或哈希函數。採用上述思想將數據存儲在一塊連續的存儲空間中,這塊連續的存儲空間稱

原创 樹的前序,中序,後序遍歷(遞歸)

描述 樹的遍歷即給出一個指向樹的指針,訪問樹中的每一個節點。樹的遍歷有三種基本遍歷方式,分別是前序(preorder)、中序(inorder)、後序(postorder)。 遞歸實現 原理 前序(preorder):先訪問節點,

原创 排序2-希爾排序

希爾排序(Shell Sort) 基本思想 先將整個待排元素序列分割成若干子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直

原创 排序1-冒泡,選擇和插入

冒泡排序(Bubble sort) 最簡單,效率最低的冒泡排序 冒泡排序是一種交換排序,基本思想是:兩兩比較相鄰記錄的的關鍵字,如果反序則交換,直到沒有反序的記錄爲止。 時間複雜度分析 最好的情況是,數組是有序的,只需要n -

原创 OpenCV中的SVM

#include "stdafx.h" #include <opencv2/opencv.hpp> #include <iostream> #include <fstream> #inclu

原创 【劍指offer】空格替換

Question 設計一種方法,將一個字符串中的所有空格替換成 %20 。你可以假設該字符串有足夠的空間來加入新的字符,且你得到的是“真實的”字符長度。 Solution 1 需要額外的一個數組: class Solution {

原创 前序遍歷和中序遍歷樹構造二叉樹

樣例 題目來自LintCode, 給出中序遍歷:[1,2,3]和前序遍歷:[2,1,3]. 返回如下的樹: 2 / \ 1 3 代碼實現 /** * Definition of TreeNode: * class T

原创 【面試題】-求未知長度的鏈表的中間節點(快慢指針)

快慢指針 所謂的快慢指針的快慢是指指針向前移動的步長。比如在單鏈表中,快指針每次向前移動2個步長,慢指針則每次向前移動1個步長。 解題思路 快速找出未知長度的鏈表的中間節點,暴力解法就是先遍歷真個鏈表,算出鏈表的長度,再從頭遍歷長

原创 【LeetCode】Binary Tree Level Order Traversal(層序遍歷)

Question Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level

原创 【面試題】-反轉句子

題目描述 給定一個字符串句子,進行反轉,不能申請額外的內存,比如“This is a sentence”,輸出就是”sentence a is This” 解題思路 先對每個單詞進行反轉,結果爲 “sihT si a ecnetn

原创 排序5-快速排序

基本思想 快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分爲兩個子序列(sub-lists)。 算法步驟 算法步驟簡述如下: 選擇一個基準值(pivot)(選擇方法很多,可以固體選某個