给定CodingBat中的任务notAlone:
如果数组中的元素前后都有值,并且这些值与它不同,那么我们会说它是“单独的”。返回给定数组的一个版本,其中给定值的每个单独实例都被其左侧或右侧较大的值替换。
notAlone([1, 2, 3], 2) → [1, 3, 3]
notAlone([1, 2, 3, 2, 5, 2], 2) → [1, 3, 3, 5, 5, 2]
notAlone([3, 4], 3) → [3, 4]
我对这个问题的解决方案通过了绝大多数测试,但不是所有测试:
public int[] notAlone(int[] nums, int val) {
int[] notAlone = new int[nums.length];
int largestNeighbour = 0;
if (notAlone.length >= 1) {
notAlone[0] = nums[0];
notAlone[notAlone.length - 1] = nums[nums.length - 1];
}
for (int i = 1; i < notAlone.length - 1; i++) {
if (nums[i] != val) {
notAlone[i] = nums[i];
}
if (nums[i] == val) {
notAlone[i] = Math.max(nums[i - 1], nums[i + 1]);
}
}
return notAlone;
}
我的问题如下:
如何解决我的问题?
是否可以使用Stream API解决此任务?
测试结果
如果数组中的元素前后都有值,并且这些值与它不同,则该元素是“单独的”
您的解决方案没有通过所有测试,因为您没有检查当前数组元素是否单独存在,也就是说,您只检查当前元素是否等于目标值,而不是检查左侧或右侧是否存在相等的元素。
这就是如何使用streams完成的,下面的代码通过了对CodingBat的所有测试:
public int[] notAlone(int[] nums, int val) {
return IntStream.range(0, nums.length)
.map(i -> isAlone(nums, val, i) ?
Math.max(nums[i - 1], nums[i + 1]) : nums[i])
.toArray();
}
public boolean isAlone(int[] nums, int val, int i) {
return nums[i] == val && i > 0 && i < nums.length - 1
&& nums[i - 1] != val && nums[i + 1] != val;
}
您提供的命令式代码可以这样修复(通过所有测试):
public int[] notAlone(int[] nums, int val) {
if (nums.length == 0) return nums; // guarding against an empty array
int[] notAlone = new int[nums.length];
notAlone[0] = nums[0];
notAlone[nums.length - 1] = nums[nums.length - 1];
for (int i = 1; i < notAlone.length - 1; i++) {
if (nums[i] == val && nums[i - 1] != val && nums[i + 1] != val) { // is "alone"
notAlone[i] = Math.max(nums[i - 1], nums[i + 1]);
} else { // is not "alone"
notAlone[i] = nums[i];
}
}
return notAlone;
}
给定CodingBat中的任务sameEnds: 如果数组开头和结尾的数字组相同,则返回true。例如,对于,n=0和n=2的endpoint相同,n=1和n=3的endpoint相同。您可以假设n在0范围内。。nums。长度(含)。 我对这个问题的解决方案通过了绝大多数测试,但不是所有测试: 我的问题如下: 如何修复我的解决方案 是否可以使用流API解决此任务
给定来自CodingBat的zeroFront notAlone任务: 返回一个数组,该数组包含与给定数组完全相同的数字,但重新排列以使所有零都在数组的开头分组。非零数字的顺序并不重要。因此变为。您可以修改并返回给定数组或制作一个新数组。 我对这个问题的解决方案在某些情况下会抛出ArrayIndexOutOfBoundsException: 我的问题如下: 如何解决我的问题? 如何使用Stream
给定来自CodingBat的任务sumNumbers sumNumbers: 给定一个字符串,返回字符串中出现的数字之和,忽略所有其他字符。数字是一行中一个或多个数字字符的序列。(注意:Character.isDigit(char)测试字符是否为字符“0”、“1”、…、'9'. 整数parseInt(string)将字符串转换为int.) 我对这个问题的解决方案如下: 是否可以使用流API解决此问
给定CodingBat的任务镜像: 给定一个字符串,请在给定字符串的开头和结尾处查找镜像(向后)字符串。 换句话说,在给定字符串的最开始,以及在字符串的最末尾以相反的顺序(可能重叠)出现零个或多个字符。例如,字符串具有镜像结尾。 示例: 我对此任务的解决方案如下: 是否可以使用Stream API解决此问题?
我正在尝试解决hackerrank中的一个“几乎已排序”的挑战。问题是: 给定一个包含元素的数组,可以只使用以下操作之一按升序对该数组进行排序吗? 交换两个元素。反转一个子段。 输入格式 第一行包含一个整数,指示数组的大小。 下一行包含以空格分隔的整数。 样本输入#1 2 4 2 示例输出 #1 是< br >交换1 2 示例输入 #2 3 3 1 2 样品输出#2 不 示例输入 #3 6 1 5