假设两个整数数组nums和numsCopy,例如:
int[] nums = {2,5,3,8,6,10}
int[] numsCopy = {2,3,5,6,8,10}
我想比较两个数组并找到第一个和最后一个不同的整数并记录它们的位置然后计算长度,最好的方法是什么?使用java。
当然,最好的方法是使用两次迭代。正如@greybeard 所提到的,我们真的很想知道使用两次迭代有什么问题。
尽管如此,为了回答这个问题,一种不使用两个for
循环等的可能方法(绝不是最好的方法)是将任务委托给 Java9 流 API:
if (nums.length != numsCopy.length)
throw new IllegalArgumentException("Arrays are not the same length");
IntPredicate elementsEqual = i -> nums[i] == numsCopy[i];
int first = IntStream.range(0, nums.length)
.dropWhile(elementsEqual)
.findFirst()
.getAsInt();
int last = IntStream.iterate(nums.length - 1, i -> i >= first, i -> i - 1)
.dropWhile(elementsEqual)
.findFirst()
.getAsInt();
int count = last - first + 1;
NoSuchElementException
如果没有发现差异,则抛出。
如果你想要的只是差异子序列的长度,你可以在一个流语句中做到这一点:
long length = IntStream.iterate(nums.length - 1, i -> i >= 0, i -> i - 1)
.dropWhile(elementsEqual)
.limit(1)
.flatMap(end -> IntStream.rangeClosed(0, end))
.dropWhile(elementsEqual)
.count();
这将返回所需子序列的长度,如果数组匹配,则返回 0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句