这个问题来自一个很棒的 youtube 频道,提供了可以在面试中提出的问题。
它基本上与在数组中找到平衡点有关。这是一个最好地解释它的例子;{1,2,9,4,-1}。在这里,因为 sum(1+2)=sum(4+(-1)) 使 9 成为平衡点。在没有检查答案的情况下,我决定实施该算法,然后再询问是否可以采用更有效的方法;
- 对数组O(n)中的所有元素求和
- 得到总和的一半O(1)
- 从左边开始扫描数组,当sumleft大于总和的一半时停止。上)
- 对右边做同样的事情,以获得求和权。 O(n)。
- 如果sumleft等于sumright返回arr[size/2]否则返回-1
我之所以问,是因为这个解决方案毫不费力地突然出现在我的脑海中,提供了 O(n) 的运行时间。如果这个解决方案是真的,是否可以开发或者如果不是真的任何替代方法?