演算法很美(實戰題)

2021-10-08 17:21:51 字數 911 閱讀 4262

1.旋轉陣列的最小數字(改造二分法)

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1.

public

class 旋轉陣列的最小數字

; system.out.

println

("旋轉陣列中的最小數字是"+f

(a));}

private

static

intf

(int

a)while

(begin+

1//截止條件是兩個數挨在一塊

else

//後半段是順序

}return a[end]

;//最後begin和end的兩個數挨一塊了,就取索引為end的數就是最小數字

}}

2.高效求a的n次冪的演算法

求a的n次冪,可以用迴圈,不斷累乘,時間複雜度為o(n),因為需要乘n次

高效求法:其實就是提高時間複雜度,從o(n)------->o(log n)

比如:求2^15,求解過程為2 ^1----->2 ^2--------->2 ^4------>2 ^8,不斷在原有的基礎上翻倍,這樣就只需要進行log n下,時間複雜度為o(log n)

public

class 高效求a的n次冪

private

static

intf

(int a,

int n)

//剩下的次冪n-ex

return y*

f(a,n-ex)

;//已經計算的數*還需要計算的低次冪

}}

演算法很美03演算法思想(分治)

分治法 divide and conquer,d c 將原問題劃分成若干個規模較小而結構與原問題一致的子問題 遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解。容易確定執行時間,是分治演算法的優點之一。分治模式在每 層遞迴上都有三個步驟 分解 divide 將原問題分解成一系 列子問題 解決...

演算法很美之位運算

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 描述乙個整型陣列裡除了兩個數字 互不相同 之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 輸入第一行 陣列的長度n 1只出現了1次的那兩個數,小的在前大的在後,空格隔...

演算法很美之字串

描述 fjxmlhx每天都在被沼躍魚刷屏,因此他急切的找到了你希望你寫乙個程式遮蔽所有句子中的沼躍魚 marshtomp 不區分大小寫 為了使句子不缺少成分,統一換成 fjxmlhx 輸入輸入包括多行。每行是乙個字串,長度不超過200。一行的末尾與下一行的開頭沒有關係。輸出輸出包含多行,為輸入按照描...