python方法大總結
方法一:直接min函式,有點像開掛
class solution:
def minnumberinrotatearray(self, rotatearray):
# write code here
if not rotatearray:
return 0
else:
return min(rotatearray)
方法二:先sort排序
class solution:
def minnumberinrotatearray(self, rotatearray):
# write code here
if not rotatearray:
return 0
else:
rotatearray.sort()
return rotatearray[0]
方法三:二分查詢
class solution:
def minnumberinrotatearray(self, rotatearray):
# write code here
length = len(rotatearray)
if length == 0:
return 0
elif length == 1:
return rotatearray[0]
else:
left = 0
right = length - 1
while left < right:
mid = (left + right)/2 找中間值應該放在迴圈的裡邊
if rotatearray[mid] < rotatearray[j]:
right = mid
else:
left = mid+1
return rotatearray[i]
方法四:比較
class solution:
def minnumberinrotatearray(self, rotatearray):
# write code here
length = len(rotatearray)
if length == 0:
return 0
elif length == 1:
return rotatearray[0]
else:
for i in range(length-1):
if rotatearray[i] > rotatearray[i+1]:
return rotatearray[i+1]
return rotatearray[length-1]
自己寫的錯誤**:
# p = 0
# q = l - 1
# x = rotatearray[l/2]
# while p+1 == q:
# if rotatearray[p] < x:
# p = l/2
# elif rotatearray[q] > x:
# q = l/2
# else:
# return true
# return max(rotatearray[p],rotatearray[q])
二分法怎麼學的,都不會寫
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39
遞迴可以解決,但是會有很嚴重的效率問題。
更簡單的辦法是從下往上計算,首先根據f(0)和f(1)算出f(2),再根據f(1)和f(2)算出f(3),..,以此類推,可以算出第n項了。時間複雜度為o(n)。
用迴圈:
# -*- coding:utf-8 -*-
class solution:
def fibonacci(self, n):
# write code here
if n == 0:
return 0
elif n == 1:
return 1
else:
fib0 = 0
fib1 = 1
fibn = 0
for i in range(2,n+2):
fibn = fib0 + fib1
fib1 = fib0
fib0 = fibn
return fibn
第二種:
# -*- coding:utf-8 -*-
class solution:
def fibonacci(self,n):
if n == 0:
return 0
elif n ==1:
return 1
else:
a = 0
b = 1
for i in range(2,n+1):
a,b = b,a+b
return b
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
同上題,也是斐波那契數列
# -*- coding:utf-8 -*-
class solution:
def jumpfloor(self, number):
# write code here
if number == 1:
return 1
elif number ==2:
return 2
else:
a = 1
b = 2
for i in range(3,number+1):
a,b = b,a+b
return b
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
推算得知2(n-1)種跳法
# -*- coding:utf-8 -*-
class solution:
def jumpfloorii(self, number):
# write code here
return 2**(number-1)
我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?
先把2*8的覆蓋方法記為f(8),用第乙個1*2小矩形去覆蓋大矩形最左邊時有兩個選擇,當豎著放的時候,右邊還剩2*7的區域,這種情形下的覆蓋方法記為f(7)。接下來考慮橫著放的情況,當1*2的小矩形橫著放左上角的時候,左下角必須再橫著放乙個1*2的小矩形,而在右邊還剩下2*6的區域,這種情形下的覆蓋方法記為f(6), 因此f(8) = f(7) + f(6), 因此還是斐波那契數列。
# -*- coding:utf-8 -*-
class solution:
def rectcover(self, number):
# write code here
if number == 0:
return 0
elif number ==1:
return 1
elif number ==2:
return 2
else:
a ,b = 1,2
for i in range(3, number+1):
a, b = b, a+b
return b
劍指offer 陣列的旋轉(1)Python實現
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。考點 二分查詢 鏈結 一 鏈結二。分析 旋轉之後的陣列實際上可以劃分...
劍指offer 斐波那契數列 python 實現
題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 判斷n是否為0,1,2,對應特殊值 否則返回第n項的結果。注 迴圈可通過,但遞迴不行。coding utf 8 class solution def fibonacci self,...
劍指offer 矩形覆蓋 python
我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?假設是乙個2 8的大矩形有f 8 種放的方法,當第乙個豎著放,那後面就有f 7 種放的方法 當第乙份橫著放,而下面那個空間也必須橫著放,剩下的就有f 6 種放的方法,那就總...