1 实现归并排序
def merge_sort(nums):
n = len(nums)
mid = n // 2
if n <= 1:
return nums
# 分
left_li =merge_sort(nums[:mid])
right_li = merge_sort(nums[mid:])
# 治
left_pointer,right_pointer = 0,0
result = []
while left_pointer < len(left_li) and right_pointer < len(right_li):
if left_li[left_pointer] < right_li[right_pointer]:
result.append(left_li[left_pointer])
left_pointer += 1
else:
result.apped(right_li[right_pointer])
right_pointer += 1
# 合
result += left_li[left_pointer:]
result += right_li[right_pointer:]
return result
2实现一个快速指数
a = p(w,n)
def my_pow(x,n):
"""快速指数"""
if n == 0:
return 1
if n < 0:
return 1 / py_pow(x,-n)
elif n % 2 :
return my_pow(x*x,n // 2)*x
else:
return my_pow(x*x,n//2)
3 搜索峰值
数组没有重复值,但可能存在多个峰值,返回任意一个峰值的index
def pesk_search(alist):
return helper_peak(alist,0,len(alist)-1)
def helper_peak(alist,start,end):
if start == end:
return start
if (start+1 == end):
if alist[start] > alist[end]:
return start
return end
mid = (start+end) // 2
if alist[mid]>alist[mid-1] and alist[mid]>alist[mid+1]:
return mid
elif alist[mid-1]>alist[mid] and alist[mid]>alist[mid+1]:
return helper_peak(alist,start,mid-1)
else:
return helper_peak(alist,mid+1,end)