在java中用递归写一个判断前几项是否有和相同的代码 public static boolean haveEqualSums(int[] input1, int[] input2) {
时间: 2024-05-20 12:16:32 浏览: 84
public static boolean haveEqualSums(int[] input1, int[] input2) {
// 如果输入长度不一致,直接返回false
if (input1.length != input2.length) {
return false;
}
// 调用递归函数判断前i项和是否相等
return haveEqualSumsHelper(input1, input2, 0, 0, 0);
}
private static boolean haveEqualSumsHelper(int[] input1, int[] input2, int i, int sum1, int sum2) {
// 如果已经遍历到数组末尾,判断两个和是否相等
if (i == input1.length) {
return sum1 == sum2;
}
// 递归调用,分别将当前元素加入到两个和中,判断后续部分是否有相等的和
return haveEqualSumsHelper(input1, input2, i+1, sum1+input1[i], sum2) ||
haveEqualSumsHelper(input1, input2, i+1, sum1, sum2+input2[i]);
}
相关问题
public static boolean haveEqualSums(int[] input1, int[] input2) { 用Java的递归写
public static boolean haveEqualSums(int[] input1, int[] input2) {
return checkEqualSums(input1, 0, input1.length - 1, input2, 0, input2.length - 1);
}
private static boolean checkEqualSums(int[] input1, int start1, int end1, int[] input2, int start2, int end2) {
if (start1 > end1 && start2 > end2) { // both arrays are empty
return true;
}
if (start1 > end1 || start2 > end2) { // one array is empty while the other is not
return false;
}
int sum1 = 0;
for (int i = start1; i <= end1; i++) {
sum1 += input1[i];
}
int sum2 = 0;
for (int i = start2; i <= end2; i++) {
sum2 += input2[i];
}
if (sum1 != sum2) {
return false;
}
// recursively check subsets
for (int i = start1; i <= end1; i++) {
for (int j = start2; j <= end2; j++) {
if (input1[i] == input2[j]) {
if (checkEqualSums(input1, start1, i - 1, input2, start2, j - 1)
&& checkEqualSums(input1, i + 1, end1, input2, j + 1, end2)) {
return true;
}
}
}
}
return false;
}
java用递归算法写出如果存在k > 0使得a1的前k项之和等于a2的前k项之和,则a1和a2的部分和相等编写一个方法haveequalsum (int[] input1, int[] input2),该方法以两个整数数组作为参数,如果它们具有相等的部分和则返回true,
否则返回false。
代码如下:
```java
public static boolean haveEqualSum(int[] input1, int[] input2) {
if (input1.length == 0 || input2.length == 0) {
return false;
}
return haveEqualSumHelper(input1, input2, 0, 0, 0);
}
private static boolean haveEqualSumHelper(int[] input1, int[] input2, int index1, int index2, int sum) {
if (index1 >= input1.length || index2 >= input2.length) {
return false;
}
sum += input1[index1] - input2[index2];
if (sum == 0) {
return true;
}
return haveEqualSumHelper(input1, input2, index1 + 1, index2 + 1, sum) ||
haveEqualSumHelper(input1, input2, index1 + 1, index2, sum) ||
haveEqualSumHelper(input1, input2, index1, index2 + 1, sum);
}
```
解释:
1. 如果其中一个数组为空,则它们不可能有相等的部分和,直接返回false。
2. 在递归函数haveEqualSumHelper中,使用两个指针index1和index2分别指向两个数组的当前位置,sum表示当前的前缀和之差。
3. 如果有某个时刻sum等于0,则说明找到了相等的部分和,返回true。
4. 否则,分别考虑三种情况:
- 将两个指针都向后移动一位;
- 将第一个指针向后移动一位;
- 将第二个指针向后移动一位。
这三种情况都可能导致sum的值发生变化,因此需要继续递归调用haveEqualSumHelper函数。如果最终都找不到相等的部分和,则返回false。
阅读全文
相关推荐
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)