import sys
def get_majority_element(arr):
if len(arr) < 2:
return arr[0]
midpoint = len(arr) // 2
left = arr[:midpoint]
right = arr[midpoint:]
majority_left = 0
majority_right = 0
temp_left = get_majority_element(left)
if temp_left != None:
majority_left = temp_left
temp_right = get_majority_element(right)
if temp_right != None:
majority_right = temp_right
counterLeft = 0
counterRight = 0
for x in range( len(arr) ):
if arr[x] == majority_left:
counterLeft+=1
elif arr[x] == majority_right:
counterRight+=1
if counterLeft > len(arr) // 2:
return majority_left
#return 1
elif counterRight > len(arr) // 2:
return majority_right
#return 1
else:
return 0
input = sys.stdin.read()
n, *arr = list(map(int, input.split()))
result = get_majority_element(arr)
print(result)
****免责声明:代码解决了问题并通过了所有测试用例。然而。。。。return语句中有一个bug,我不太清楚。现在,它将正确返回任何数组中的多数元素。你知道吗
但是,如果将当前return语句替换为带注释的return语句(return 1),则返回值不是1。这怎么可能? 不知何故,当返回到调用方func时,返回1变成了0?你知道吗
输入: 五
2 3 9 2
输出:2
以下是分而治之的方法: 假设数组a=[2 3 9 2 2]。你把它分成b1=[23]和b2=[92]。然后将b1拆分为b11=[2]和b12=[3]。然后返回2和3,并计算它们在b1中的出现次数。你知道吗
如果其中一个在b1中发生超过(n/2=2/2=1)次,则它们是b1的多数元素。否则,b1不包含多数元素,返回0。然后,您的程序将使用与上面相同的过程递归地开始分割b2。然后,它将看到b2中的一个多数元素是2,并计算它在a中出现的次数,得出结论,它在a中出现的次数超过(n/2=5/2=2)次,因此它是一个多数元素。你知道吗
非常简单:当您从所有调用返回1或0时,对于mailty\u left和mailty\u right中的每一个,您都会使用这两个值中的一个到达顶层。在列表中查找1和0时,没有。你知道吗
即使将这些作为项目计数,也会在顶层返回failure,因为1+1不大于5//2。你知道吗
相关问题 更多 >
编程相关推荐