劍指offer演算法題
題目描述
給你一根長度為n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1,m<=n),每段繩子的長度記為k[1],…,k[m]。請問k[1]x…xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。
題目分析
1.首先判斷k[0]到k[m]可能有哪些數字,實際上只可能是2或者3。
2 .當然也可能有4,但是4=2*2,我們就簡單些不考慮了。
5 < 2 * 3, 6 < 3 * 3,比6更大的數字我們就更不用考慮了,肯定要繼續分。
3.其次看2和3的數量,2的數量肯定小於3個,為什麼呢?因為2 * 2 * 2 < 3 * 3,那麼題目就簡單了。
4.直接用n除以3,根據得到的餘數判斷是乙個2還是兩個2還是沒有2就行了。
5.由於題目規定m>1,所以2只能是1 * 1,3只能是2 * 1,這兩個特殊情況直接返回就行了。
6.乘方運算的複雜度為:o(log n),用動態規劃來做會耗時比較多。
public
class
solution
if(target ==3)
long x = target %3;
long y = target /3;
if(x ==0)
else
if(x ==1)
else
}}
演算法學習 1
插入排序是學習演算法時最先學到的乙個演算法,很簡單,也許看一遍就會理解,從而覺得自己掌握這個基本的演算法。但是很多人可能會像我一樣,過了一段時間,提筆來寫一下插入排序的偽 就很難寫出書本上如此優雅的偽 insertion sort a for j 2 to a.length key a j inse...
演算法學習1
求最大子列和問題 給定n個整數的序列,求最大連續子列和,演算法 求出每乙個子列的和 然後得到最大的和返回 static intmaxsum1 int arr if maxsumreturn maxsum 時間複雜度 t n 3 空間複雜度 o 1 優化1 已經計算過的子列和不需要重複計算,再已經計算...
演算法學習1
因為報名參加了藍橋杯軟體技術大賽,所以,我這段時間也在練習寫演算法方面的題,但這不是主要的,更多的是為自己打下乙個好的基礎,為以後自己找工作做儲備。題目 定義乙個circle類,包含乙個double型的radius屬性代表圓的半徑,乙個findarea 返回圓的面積。定義乙個passobject,在...