当前位置: 首页 > 知识库问答 >
问题:

Codingbat挑战:sameEnds流API解决方案

锺英卫
2023-03-14

给定CodingBat中的任务sameEnds:

如果数组开头和结尾的数字组相同,则返回true。例如,对于{5、6、45、99、13、5、6},n=0和n=2的endpoint相同,n=1和n=3的endpoint相同。您可以假设n在0范围内。。nums。长度(含)。

sameEnds([5, 6, 45, 99, 13, 5, 6], 1) → false
sameEnds([5, 6, 45, 99, 13, 5, 6], 2) → true
sameEnds([5, 6, 45, 99, 13, 5, 6], 3) → false

我对这个问题的解决方案通过了绝大多数测试,但不是所有测试:

public boolean sameEnds(int[] nums, int len) {
  
  if (nums.length >= len * 2) {
    for (int i = 0, j = nums.length - 1 ; i < len && len > 0; i++, j--) {
       if (nums[i] != nums[j]) {
         return false;
       }
    }
  }
  
  return true;
}

我的问题如下:

  1. 如何修复我的解决方案
  2. 是否可以使用流API解决此任务

共有2个答案

云承弼
2023-03-14

您可以使用内置的方法数组。如果使用Java 9或更高版本,则等于:

public boolean sameEnds(int[] nums, int len) {
    return Arrays.equals(nums, 0, len, nums, nums.length - len, nums.length);
}
姬俊能
2023-03-14

您可以使用allMatch()操作来用流实现它。

此解决方案通过CodingBat上的所有测试用例:

public boolean sameEnds(int[] nums, int len) {
    return java.util.stream.IntStream.range(0, len)
        .allMatch(n -> nums[n] == nums[nums.length - (len - n)]);
}

对您的强制解决方案的修复可能如下所示:

public boolean sameEnds(int[] nums, int len) {
    for (int i = 0, j = nums.length - 1 - (len - 1); i < len; i++, j++) {
        if (nums[i] != nums[j]) {
            return false;
        }
    }
    return true;
}

我删除了包装if条件,因为whennums。长

条件<代码>长度

表示尾部子数组中位置的变量j已初始化为nums.length-(len-1)-最后一个有效索引减去子数组的长度。for循环的所谓增量语句从j--更改为j

 类似资料:
  • 给定来自CodingBat的任务sumNumbers sumNumbers: 给定一个字符串,返回字符串中出现的数字之和,忽略所有其他字符。数字是一行中一个或多个数字字符的序列。(注意:Character.isDigit(char)测试字符是否为字符“0”、“1”、…、'9'. 整数parseInt(string)将字符串转换为int.) 我对这个问题的解决方案如下: 是否可以使用流API解决此问

  • 给定来自CodingBat的zeroFront notAlone任务: 返回一个数组,该数组包含与给定数组完全相同的数字,但重新排列以使所有零都在数组的开头分组。非零数字的顺序并不重要。因此变为。您可以修改并返回给定数组或制作一个新数组。 我对这个问题的解决方案在某些情况下会抛出ArrayIndexOutOfBoundsException: 我的问题如下: 如何解决我的问题? 如何使用Stream

  • 给定CodingBat中的任务notAlone: 如果数组中的元素前后都有值,并且这些值与它不同,那么我们会说它是“单独的”。返回给定数组的一个版本,其中给定值的每个单独实例都被其左侧或右侧较大的值替换。 我对这个问题的解决方案通过了绝大多数测试,但不是所有测试: 我的问题如下: 如何解决我的问题? 是否可以使用Stream API解决此任务? 测试结果

  • 给定CodingBat的任务镜像: 给定一个字符串,请在给定字符串的开头和结尾处查找镜像(向后)字符串。 换句话说,在给定字符串的最开始,以及在字符串的最末尾以相反的顺序(可能重叠)出现零个或多个字符。例如,字符串具有镜像结尾。 示例: 我对此任务的解决方案如下: 是否可以使用Stream API解决此问题?

  • CodingBat中的给定任务sameEnds: 给定一个字符串,返回出现在字符串开头和结尾且不重叠的最长子字符串。例如,sameEnds(“abXab”)是“ab”。 我的解决方案通过了所有测试,除了一个^: 这里有什么问题?我怎样才能修复它?