1. 程式人生 > >算法題的五種解法

算法題的五種解法

bubuko 元素 頭腦風暴 png bsp 分享 ima 分享圖片 .com

方法一:舉例法

先列舉一些具體的例子,看能否發現其中的一般規則。

示例:給定一個具體時間,計算時針與分針之間的角度。

技術分享圖片

方法二:模式匹配法

將現有問題與相似問題作類比,看看內否通過修改相關問題的解法來解決新問題。

技術分享圖片

分析:這個問題和兩個問題有點類似

1)在一個無序的數組中查找最小的元素

  這個問題就是遍歷所有元素即可,沒有用到給定信息(這是一個有序數組),實在沒辦法再用這種。

2)在一個有序的數組中找出某個特定元素(比如通過二分查找法)

  這是一個有序數組,只是一部分元素循環移動過。因此元素排序肯定是從小到大,在某個位置突然變小,接著又開始從小到大排序。那個“轉折點”正是最小的元素。

  比較中間元素和末尾元素(6和2),由於mid > right,可以確定這個轉折點就在這兩個元素之間。如果mid < right,則說明轉折點要麽在牽絆部分,要麽根本不存在。

方法三:簡化推廣法

  簡化推廣法即分多步走,首先,我們會 修改某個約束條件,比如數據類型或數據量,從而簡化這個問題。接著我們轉而處理這個問題的簡化版本。一旦找到解決了簡化版問題的算法,我們就可以基於這個問題進行推廣,讓它適用於這個問題的復雜版本。

方法四:簡單構造法

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

方法五:數據結構頭腦風暴法

我們可以快速過一遍數據結構的列表,然後逐一嘗試各種數據結構。這種方法很實用,因為一旦找到合適的數據結構,很多問題就迎刃而解。

技術分享圖片

技術分享圖片


技術分享圖片

來自:

《程序員面試金典(第5版)》

算法題的五種解法