BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #55292同步于 2017/3/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

阿里实习算法题,大神进来看看吧

StarryZJY
2017/3/1镜像同步37 回复
把一个数组分成四份,三个分割点不算进求和中,使得每份的和要相同。如果可以返回true,如果不能分为四份和一样的就返回false。 {2,5,1,1,1,1,4,3,7,5,7} 比如这数组,分为四份,每份的和相同,分割点不算,分为{2,5} {1,1,1,4},{7},{7}.。设计的函数时间复杂度不超过O(n) 发自「贵邮」
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
yanhan123机器人#1 · 2017/3/1
hash表 和 前缀和数组 结合?
ml3615556机器人#2 · 2017/3/1
太难了。。 我能想到的,前后一个分割点交替向中间靠,若两端相等,则找中间一个分割点另中间两半相等(二分思想),与两端相等就返回 稍微优化一下,找中间分隔点,若中间两段都大于最外两段,则break 复杂度大概是n lgn 帮@nuanyangyang,看她会不会...
HB0318机器人#3 · 2017/3/2
你这个复杂度是怎么算的呀,我感觉按照你的思路时间复杂度应该不是nlogn吧 【 在 ml3615556 的大作中提到: 】 : 太难了。。 : 我能想到的,前后一个分割点交替向中间靠,若两端相等,则找中间一个分割点另中间两半相等(二分思想),与两端相等就返回 : 稍微优化一下,找中间分隔点,若中间两段都大于最外两段,则break : ...................
ml3615556机器人#4 · 2017/3/2
我自己的思路: 两端向中间靠的指针,复杂度o(n) 每次两端相等,找第三个分割点(2分查找的思路),复杂度o(lgn) 最差的情况,复杂度o(n lgn) 后面那个思路是实实在在的o(n),不过有前提是正数组才行 【 在 HB0318 的大作中提到: 】 : 你这个复杂度是怎么算的呀,我感觉按照你的思路时间复杂度应该不是nlogn吧
HB0318机器人#5 · 2017/3/2
我感觉找第三个分割点你这两种思路都没法做到复杂度为常数吧。求教了。 【 在 ml3615556 的大作中提到: 】 : 我自己的思路: : 两端向中间靠的指针,复杂度o(n) : 每次两端相等,找第三个分割点(2分查找的思路),复杂度o(lgn) : ...................
ml3615556机器人#6 · 2017/3/2
第一个确实没办法做到常数。 第二个思路是: sum[i] -> 前i个数的和 hashmap<sum, i> -> 和为sum的前i 个数 //这里要求数组全为正,sum严格单调才行,不然会有重复的sum 试着找第一个分割点(o(n)),得到第一个分割点前的和,然后用hash向后找3个分割点(3 o(1)),如果最后一个落在数组尾部,那么找到该分割点。 复杂度o(n) 【 在 HB0318 的大作中提到: 】 : 我感觉找第三个分割点你这两种思路都没法做到复杂度为常数吧。求教了。
HB0318机器人#7 · 2017/3/2
赞 【 在 ml3615556 的大作中提到: 】 : 第一个确实没办法做到常数。 : : 第二个思路是: : ...................
zyqbit机器人#8 · 2017/3/3
next = map.getOrDefault(sums[i] + sums[next + 1], -1)) > 0 请问这段代码怎么理解? 【 在 ml3615556 的大作中提到: 】 : 太难了。。 : 我能想到的,前后一个分割点交替向中间靠,若两端相等,则找中间一个分割点另中间两半相等(二分思想),与两端相等就返回 : 稍微优化一下,找中间分隔点,若中间两段都大于最外两段,则break : ...................
ml3615556机器人#9 · 2017/3/3
找下一个分割点的前一位,也就是找下一段的终点。 sum[i] -> 每一段的和 sums[next + 1] ->包含分割点的前几段的和 【 在 zyqbit 的大作中提到: 】 : next = map.getOrDefault(sums[i] + sums[next + 1], -1)) > 0 : 请问这段代码怎么理解?