提问人:Evgeniy 提问时间:6/12/2022 更新时间:6/12/2022 访问量:44
Codingbat 挑战赛:zeroMax Stream API 解决方案
Codingbat challenge: zeroMax Stream API Solution
问:
给定来自 CodingBat 的任务 zeroMax zeroMax:
返回给定数组的一个版本,其中数组中的每个零值都替换为数组中零右侧的最大奇数值。如果零的右边没有奇数值,则将零保留为零。
zeroMax([0, 5, 0, 3]) → [5, 5, 3, 3]
zeroMax([0, 4, 0, 3]) → [3, 4, 3, 3]
zeroMax([0, 1, 0]) → [1, 1, 0]
我对这个任务的解决方案通过了 CodingBat 上的所有测试:
public int[] zeroMax(int[] nums) {
boolean containsZero = java.util.stream.IntStream.of(nums).anyMatch(x -> x == 0);
if (!containsZero) {
return nums;
}
int[] zeroMax = new int[nums.length];
int largestOddRight = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
for (int j = i+1; j < nums.length; j++) {
if (nums[j] % 2 != 0) {
if (nums[j] > largestOddRight) {
largestOddRight = nums[j];
}
}
}
zeroMax[i] = largestOddRight;
largestOddRight = 0;
} else {
zeroMax[i] = nums[i];
}
}
return zeroMax;
}
但我有以下问题:
如何使用 Stream API 解决此任务?
答:
1赞
Eritrean
6/12/2022
#1
在数组的索引上流式传输,检查当前元素是否等于零,如果不是将其映射到自身,如果是,则使用过滤赔率从当前位置开始再次流式传输数组的其余部分,找到一个可选的最大值,如果可选,则返回当前元素,否则返回当前元素Arrays.stream(array, from, to)
public int[] zeroMax(int[] nums){
boolean containsZero = java.util.stream.IntStream.of(nums).anyMatch(x -> x == 0);
if (!containsZero) {
return nums;
}
return java.util.stream.IntStream.range(0, nums.length).map(
i -> nums[i] != 0 ? nums[i] : Arrays.stream(nums, i, nums.length)
.filter(j -> j % 2 == 1)
.max()
.orElse(nums[i]))
.toArray();
}
上一个:编码蝙蝠计数YZ
下一个:选择按姓氏升序排序的所有员工
评论