题目如下:

解题思路:居然把卖火柴的小女孩都搬出来了。题目的意思是输入一个数组,判断能否把数组分成四个子数组,使得每个子数组的和相等。首先我们可以很容易的求出每个子数组的和应该是avg = sum(nums)/4,接下来我的思路是求出nums中所有和等于avg的子数组,子数组中保存元素下标,然后找出四个不存在相同下标的子数组求并集,如果并集长度刚好等于len(nums),那么就是符合条件的,返回true。如果在子数组列表中找到四个符合条件的子数组,我用的是DFS,为什么不用BFS?因为题目要求是找到一组符合条件的子数组即可,DFS显然要比BFS快。

代码如下:

class Solution(object):
def makesquare(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
nums.sort()
border = 4
if sum(nums)%border != 0 :
return False
avg = sum(nums)/border
queue = [[x] for x in xrange(len(nums))]
res = []
visit = [0 for x in xrange(len(nums))]
while len(queue) > 0:
nl = queue.pop(0)
amount = 0
for i in nl:
amount += nums[i]
if amount == avg:
res.append(nl)
for i in nl:
visit[i] = 1
continue
tl = []
for i in xrange(nl[-1]+1,len(nums)):
if amount + nums[i] <= avg:
tl = nl[:]
tl.append(i)
queue.append(tl)
if len(res) < border:
return False
if sum(visit) != len(visit):
return False
queue = []
for i in res:
queue.append((set(i),1))
#print queue
while len(queue) > 0:
ns,count = queue.pop(0)
if count == border and len(ns) == len(nums):
#print ns
return True
for i in res:
#print ns | set(i)
if len(ns | set(i)) == len(ns) + len(i):
queue.insert(0,(ns|set(i),count+1)) return False

最新文章

  1. Git add 常见用法
  2. BZOJ4297 : [PA2015]Rozstaw szyn
  3. JSP 相关试题(一)
  4. 浅谈HAL
  5. 【AngularJs】---&quot;Error: [ng:areq] Argument &#39;fn&#39; is not a function, got undefined&quot;
  6. zoj 3209.Treasure Map(DLX精确覆盖)
  7. mybatia的mypper.xml文件,参数类型为map,map里有一个键值对的值为数组,如何解析,例子可供参考,接上文,发现更简便的方法,不必传数组,只需传字符串用逗号隔开即可
  8. 真正实现Netty私有协议开发
  9. 跨域访问解决方案:JSONP
  10. Oracle 12C 新特性之非分区表转分区表online clause(不停业务+索引有效)
  11. SpringBoot整合SpringCloud搭建分布式应用
  12. TreeView 节点拖拽
  13. MyBatis工具类
  14. pytorch torchvision.ImageFolder的使用
  15. Codeforces 939C - Convenient For Everybody
  16. Sublime Text3自定义全部字体大小、字体类型和背景颜色
  17. ES6 Promise 异步操作
  18. zabbix准备:nginx安装
  19. modelform save
  20. [转]TCP滑动窗口详解

热门文章

  1. 8.k8s.认证与访问控制
  2. LeetCode.867-转置矩阵(Transpose Matrix)
  3. Time Series Anomaly Detection
  4. JavaScript Return Object.Type
  5. jmeter应用之批量插入数据
  6. IDEA 快捷键 (长期更新)
  7. MySQL的事务和视图
  8. vue router应用及总结
  9. Nginx 3.使用配置
  10. Tarjan水题系列(2):HNOI2012 矿场搭建