对于目前让我困惑的问题,我应该编写一个名为countTriples的静态方法,该方法将接受任何整数数组作为参数和一个整数键,并返回三个或更多连续键出现的次数。超过三个键的序列仍然算作一个三元组。
伪代码示例: countTriples(1 3 3 3 0 3 3 1 3 3 3 8,3) => 2
伪代码示例: countTriples(1 7 7 7 0 7 7 7 1 7 7 7 8,7) => 3
伪代码示例: countTriples(1 14 14 4 1 14,14) => 0
这是我到目前为止所做的,它适用于某些情况,但不适用于以下情况:{1,2,1,1,1,5,6,7,8,1,1,1,1}
import java.util.*;
public class Sample {
public static int countTriples(int[] data, int key) {
int count = 0;
int c= 0;
for (int i = 0; i < data.length-1; i++) {
if (data[i] == key) {
c++;
if (c >= 3) {
count++;
c = 0;
}
}
else {
count = 0;
}
}
System.out.println(count);
return count;
}
public static void main(String[] args) {
int[] arr = {1,2,1,1,1,5,6,7,8,1,1,1,1};
countTriples(arr, 1);//currently returns 1, 2 expected
}
}任何帮助我们都将不胜感激
发布于 2020-03-09 10:52:20
我们创建一个初始循环,遍历所有值,直到找到一个与键匹配的值。当我们这样做时,我们创建另一个循环,从下一个索引开始,直到我们找到一个不匹配的索引,或者直到我们到达末尾(这很重要)。一旦命中了一个非键值,我们就会检查当前for循环中的偏移量是否为3或大于初始的for循环。如果是这样的话,我们增加count并按照我们在第二个循环中循环的数量来偏移第一个循环,以确保没有重复的循环。
public static int countTriples(int[] data, int key) {
int count = 0;
for (int index = 0; index < data.length; index++) {
int valueAtIndex = data[index];
if (valueAtIndex != key) {
continue;
}
for (int offset = index + 1; offset < data.length; offset++) {
int valueAtOffset = data[offset];
if (valueAtOffset != valueAtIndex || offset == data.length - 1) {
int indexOffset = offset - index;
if (indexOffset >= 3) {
index += indexOffset - 1;
count++;
}
break;
}
}
}
return count;
}https://stackoverflow.com/questions/60594061
复制相似问题