分治法
aaaqqq1234
这个作者很懒,什么都没留下…
展开
-
奇偶数换序
题目 给定一个数组{a1,a2,a3,…,an,b1,b2,b3,…bn}转换成{a1,b1,a2,b2,a3,b3,…,an,bn} 思路 第一个for循环控制左半边an的次数,第二个for循环控制bn交换的次数 代码 def change(list): lenn = len(list) n = lenn//2 print(n) for i in range(n): for j in range(n-1-i): list[n+i-j],list[n+i-j-1] = l原创 2020-07-14 22:26:38 · 93 阅读 · 0 评论 -
计算逆序对
题目 例如,2,4,1,3,5有三个逆序对(2,1)(4,1)(4,3) 思路 用归并排序的思想如果我左边的比右边大,那么我左边之后的全都比右边大,都是逆序对 def inv_merge(list): if len(list) <= 1: return list,0 mid = len(list)//2 left,lnum = inv_merge(list[:mid]) right,rnum = inv_merge(list[mid:]) result,anum = mer原创 2020-07-14 22:02:25 · 153 阅读 · 0 评论 -
查找第k小的元素
题目 给一个数组,查找第k小的元素 思路 采用快速排序的思路,递归查找,一轮结束以后如果j的位置=k+1,则就是第k小的数,若大于,则往左找,小于,则往右边找。 代码 def k_min(list,k): pivot = list[0] i,j = 1,len(list)-1 while i<=j: if list[i] > pivot and list[j] <= pivot: list[i],list[j] = list[j],list[i]原创 2020-07-14 18:21:34 · 262 阅读 · 0 评论 -
搜索峰值
题目 给一个字符串,如1,3,2,则3就是一个峰值 规定正无穷和负无穷都是 负无穷 返回任意一个峰值 思路 用二分法,先比较mid和mid左右两边的数,然后在递归两边 代码 def search_peak(list): return search_peakhelper(list,0,len(list)-1) def search_peakhelper(list,start,end): if start == end: return list[start] if start + 1 ==原创 2020-07-14 14:11:08 · 780 阅读 · 0 评论 -
计算a^n
题目 计算a^n 思路 不用for循环,每次把n拆开来算,递归 代码 def an(a,n): if n == 0: return 1 if n == 1: return a if n%2 == 0 : return an(a*a,n//2) else: return an(a*a,n//2)*a原创 2020-07-14 11:29:06 · 214 阅读 · 0 评论