PHP-任意个数相加等于这些数的最大值

发布于 2016-12-15 05:14:04 字数 664 浏览 1239 评论 4

一个包含任意多个数字(没有重复)的数组。如果任意值相加等于这个数组中的最大值,返回True,否则返回false.(注意是任意个数相加,只要有就返回结果。数组中的数字没有重复,且可以为负数)
Input = 5,7,16,1,2 Output = false
Input = 3,5,-1,8,12 Output = true

英文原文Have the function ArrayAdditionI(arr) take the array of numbers stored in arr and return the string true if any combination of numbers in the array can be added up to equal the largest number in the array, otherwise return the string false. For example: if arr contains [4, 6, 23, 10, 1, 3] the output should return true because 4 + 6 + 10 + 3 = 23. The array will not be empty, will not contain all the same elements, and may contain negative numbers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

瑾兮 2017-06-20 08:11:12

首先,“如果任意值相加等于这个数组中的最大值,返回True”,这根本就是永远返回True好不好?
然后,goustzhu的答案中这一段,“如果取出来的数组中,res要比其他数之和都要大,则直接返回false。”在数组允许有负值的时候是不成立的,比方说res=7,数组5,2,-1,这就直接返回false了。
这问题原型是问数组里有没有任意两个数相加得另一个给定值,方法是用hash表。改成任意个数相加,而且允许数组里存在负值的话,可能是NP的,有点类似背包问题,请高手来判断解答吧。

灵芸 2017-06-05 00:52:01

我觉得是要用背包的思想来解这道题。

偏爱自由 2017-06-03 06:05:39

基本思路可以是使用递归的思想,先将目标数组arr排序(从大到小的顺序),创建一个方法judge(int[] arr),方法中内容为:取出最大值作为需要加的的结果res;按arr[1]~arr[n]的顺序取数:先取arr[1],用res-arr[1]作为新的res_,如果res_==0,则返回True;否则,在arr[2]~arr[n]中取小于res-arr[1]的所有数以及res_组成的新的数组temp,将新的数组使用方法judge(int[] arr)调用。如果取出来的数组中,res要比其他数之和都要大,则直接返回false。

瑾兮 2017-04-05 23:11:28

定义方法judge(int[] arr),方法体里写:定义初始最大值变量 i=0 ;然循环数组,如果 i<arr[n] ,则 i=arr[n], 循环完后,i等于数组里面的最大值,然后跟 [任意个数相加和] 做比较,等于就返回true,否则返回false。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文