1.遞迴
#1.斐波那契(1,1,2,3,5,8,...前兩項之和是後一項),遞迴問題(呼叫自身,結束條件)#一 。時間複雜度2**n,即n+1,時間複雜度翻一倍
def fibnacci(n):
if n==0 or n==1:
return 1 #結束條件
else:
return fibnacci(n-1)+fibnacci(n-2)#前兩項和,呼叫自身
@cal_time#遞迴函式不能直接用裝飾器
def fib1(n):
return fibnacci(n)
#二。時間複雜度n,空間複雜度n,
@cal_time
def fib2(n):
li=[1,1]
for i in range(2,n+1):
return li[n]
#三。時間複雜度n
def fib3(n):
a=1b=1
c=1for i in range(2,n+1):
c=a+b
a=bb=c
return c
print(fib1(33))
#時間裝飾器
import time
def cal_time(func):
t1=time.time()
result=func(*args,**kwargs)
t2=time.time()
print("%s running time:%s secs."%(func.__name__,t2-t1))
return result
#遞迴,漢諾塔
def hanoi(n,a,b,c):
if n>0:
hanoi(n-1,a,c,b)
print('%s->%s'%(a,c))
hanoi(n-1,b,a,c)
hanoi(3,'a','b','c')
2.列表查詢(2種)
#列表查詢(2種):順序查詢o(n),二分查詢o(logn)li=[1,2,5,67,2,6,7]
6 in li#true
li.index(6)#6的索引是5
#線性查詢,o(n)
def line_search(num,li):
count=0
for i in li:
if i==num:
return count
else:
count+=1
return -1
print(line_search(67,li))
#二分查詢o(logn),有序列表才可以二分查詢
def bin_search(li,val):
low=0
high=len(li)-1
while low<=high:
mid=(low+high)//2
if li[mid]==val:
return mid
elif li[mid]value:
bin_search_rec[data_set,value,low,mid-1]
else:
bin_search_rec[data_set,value,low+1,high]
else:
return -1
動態規劃
#動態規劃#遞迴arr=[1,2,4,1,7,8,3]
def rec_opt(arr,i):
if i==0:
return arr[0]
elif i==1:
return max(arr[0],arr[1])
else:
a=rec_opt(arr,i-2)+arr[i]
b=rec_opt(arr,i-1)
return max(a,b)
#列表儲存
def dp_opt(arr):
opt=np.zeros(len(arr))
opt[0]=arr[0]
opt[1]=max(arr[0],arr[1])
for i in rang(2,len(arr)):
a=opt[i-2]+arr[i]
b=opt[i-1]
opt[i]=max(a,b)
return opt(len(arr)-1)
arr=[3,34,4,12,5,2]
def rec_subset(arr,i,s):
if s==0:
return true
elif i==0:
return arr[0]==s
elif arr[i]>s:
return rec_subset(arr,i-1,s)
else:
a=rec_subset(arr,i-1,s-arr[i])
b=rec_subset(arr,i-1,s)
return a or b
def dp_subset(arr,s):
subset=np.zeros((len(arr),s+1),dtype=bool)
subset[:,0]=true
subset[0,:]=false
subset[0,arr[0]]=true
for i in rang(1,len(arr)):
for s in range(1,s+1):
if arr[i]>s:
subset[i,s]=subset[i-1,s]
else:
a=subset[i-1,s-arr[i]]
b=subset[i-1,s]
subset[i,s]=a or b
r,c=subset.shape
return subset[r-1,c-1]
leetcode學習筆記38
for example,given n 3,a solution set is 這道題是借鑑網上的思路解出的,主要摘自 所謂backtracking都是這樣的思路 在當前局面下,你有若干種選擇。那麼嘗試每一種選擇。如果已經發現某種選擇肯定不行 因為違反了某些限定條件 就返回 如果某種選擇試到最後發現...
Nemo的LeetCode學習筆記(3)
題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。輸入 pwwkew 輸出 3 解釋 因為無重複字...
Leetcode周賽 198學習筆記
leetcode官方題解 1518 1 模擬 先把所有的酒喝完,得到n個空酒瓶。隨後,每次可以拿e個空酒瓶換1瓶新酒,將這1瓶新酒喝完,與剩下的e 1個酒瓶,去換新酒 res numbottles emptybottles numbottles while emptybottles exchange...