LeetCode每日一题----416分割等和子集

LeetCode每日一题----416分割等和子集

首先我们对题目进行分析,他需要将一个集合划分成两个相等和的集合,那么我们可以确定如下几点:

  1. 列表元素和为偶数 不是偶数的return False
  2. 如果列表中最大的元素大于总的和的一半,那么return False

深度优先DFS方法

我们已经分析出了如上几点,那么我们现在的主要任务就是去找元素的和可以刚好是总和的一半,要是可以找到几个元素的和是总数的一半,那么另一半自然也是总和的一半,这样就符合要求了,自然的我们想到遍历的方法可以是DFS。

对于这种给定的是数组的数据结构进行DFS,我们通常是如下做法:

def dfs(nums,total):
	if total==0:
		return True
	if total<0:
		return False
	for i in range(len(nums-1):
		if dfs(nums[i+1:],total-nums[i]:
			return True
	return False

大家可以记住这样的模板,便于以后的算法练习

但是,我在LeetCode通过这个方法提交,结果
在这里插入图片描述
看来递归的方法还是耗时很厉害的

动态规划

当我们在上面分析之后 发现0/1背包问题很类似 我们可以考虑利用动他规

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值