gpt4 book ai didi

java - 在这个 if 条件下是否真的需要 >=。 == 还不够吗?

转载 作者:行者123 更新时间:2023-11-29 05:02:58 25 4
gpt4 key购买 nike

这就是问题所在

给定一个整数数组,是否可以选择一组一些整数,使得该组总和达到给定的目标,并具有这些额外的约束:数组中所有 5 的倍数必须包含在群组。如果紧跟在 5 的倍数后面的值为 1,则不得选择它。 (不需要循环。)

此出色解决方案的功劳归功于 vikkymandloi

 public boolean groupSum5(int start, int[] nums, int target)
{
if(start >= nums.length)
{
if(target == 0)
return true;
return false;
}
if(nums[start] % 5 == 0)
{
if(start < nums.length - 1 && nums[start+1] == 1)
return groupSum5(start + 2, nums, target - nums[start]);
return groupSum5(start + 1, nums, target - nums[start]);
}
if(groupSum5(start + 1, nums, target - nums[start]))
return true;
return groupSum5(start + 1, nums, target);
}

但我有一个问题,是否真的需要以下条件

if(start >= nums.length)

我觉得以下就足够了

if(start == nums.length)

我理解 >= 背后的原因可能是因为当数组中的数字可被 5 整除时我们跳 2。但我们也在做下面的事情

if(start < nums.length - 1 && nums[start+1] == 1)

这意味着如果数组看起来像 {2,10,5},对于最后一个元素是 5,虽然它可以被 5 整除,但我们仍然只会跳转 1 次,而不是两次。所以 start 现在是 4,等于 nums.length。所以,在最坏的情况下,start 只能等于 nums.length,而不能超过它。

编辑:我有一些建议,当“开始”大于 nums.length 时,>= 是必需的。我不确定是否会遇到这种情况。从 main 函数开始,我只会将 start 设为 0。从那时起,它只会递增 1 倍,如果不是最后一个元素,则递增 2 倍。因此,从最后一个元素开始,增量总是增加 1,这意味着,始终会遇到 start==len。

最佳答案

取决于你想要什么。如果你确定你的开始总是等于 nums 并且这是唯一一次它应该工作那么是的,第二次就足够了。但是,如果它可以等于或大于使用第一个。

一些离散数学时间。在这里我们使用逻辑语句。语句 >= 读作 Greater OR Equal。令 p = 更大,q = 相等。

  • v是离散数学中的OR符号,^是AND,XOR是exclusiveOR

对于处理 OR 逻辑运算符的语句,以下真值表成立:

p v q; p = T, q = T; True

p v q; p = T, q = F; True

p v q; p = F, q = T; True

p v q; p = F, q = F; FALSE

因此,它适用于四种情况中的三种。希望能帮助到你。对于 AND (&&) 运算符逻辑,它仅在 p 和 q 都为 TRUE 时成立。顺便说一句||是 OR 的符号。希望能帮助到你。

关于java - 在这个 if 条件下是否真的需要 >=。 == 还不够吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com