【发布时间】:2023-01-19 04:27:25
【问题描述】:
考虑如图所示的数组
int[] nums = {1,1,1,2,2,3,3,3,4,4,4,4,5,5,5,1,1,2,2,2}.
输出连续重复 n 次的数字。例如,如果我们需要输出一个连续重复 3 次的数字,那么输出必须是 1,3 和 5。4 不应被视为连续重复 4 次 4 次。
请让我知道如何使用传统和 Java 8 流方式在 Java 中实现这一点。
尝试了类似下面的内容,但它忽略了最后三个元素。如果我不给它,它就会越界。
for(int i=0; i<nums.length-3; i++){
if(nums[i] == nums[i+1] && nums[i+1] == nums[i+2] && nums[i+2] != nums[i+3]){
System.out.println(nums[i]);
continue;
}
}
【问题讨论】:
-
只需保留连续字符数的总计 n,如果计数等于 n,则打印当前字符,如果遇到 n 或字符发生变化,则将计数器归零。不需要多个数组索引。
-
现在的问题是你总是检查下一个组后的元素,但最后一组
{....,2,2,2}后面没有元素。因此,循环提前终止;条件应该运行到i < nums.length - 2,但随后我们得到一个IndexOutOfBoundException。这意味着当且仅当i < nums.length - 3时,我们才应该检查nums[i+2] != nums[i+3]。