Python实现众数问题(分治递归)
本文原创
def split(list,dic):
n = len(list)
mid = n // 2
flag = 0
print(mid)
dic["mid"] = mid
for i in range(mid+1):
if list[i] == list[mid]:
dic["l"] = i
break
if (mid+1 == n):
dic["r"] = mid+1
for j in range(mid+1,n):
if list[j] != list[mid]:
dic["r"] = j
flag = 1
break
if flag == 0:
dic["r"] = j+1
def Mode(list,dic):
split(list,dic)
s = dic["r"] - dic["l"]
if s>dic["num"]:
dic["maxnum"] = list[dic["mid"]]
dic["num"] = s
if (dic["l"]) > s:
Mode(list[:dic["l"]],dic)
if (len(list)-dic["r"]) > s:
Mode(list[dic["r"]:],dic)
if __name__ == "__main__":
list = [1,2,3,4]
list.sort()
print(list)
dic = {"r":0,"l":0,"maxnum":0,"num":-1,"mid":0}
Mode(list,dic)
print("zhongshu---->")
print("出现了 %d 次"% dic["num"])
print("众数是 %d "% dic["maxnum"])
先上传上来,以后再补充细节