首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >方法返回三个或更多连续键出现的次数。

方法返回三个或更多连续键出现的次数。
EN

Stack Overflow用户
提问于 2020-03-09 10:33:32
回答 1查看 59关注 0票数 0

对于目前让我困惑的问题,我应该编写一个名为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}

代码语言:javascript
运行
复制
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
    }
}

任何帮助我们都将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-09 10:52:20

我们创建一个初始循环,遍历所有值,直到找到一个与键匹配的值。当我们这样做时,我们创建另一个循环,从下一个索引开始,直到我们找到一个不匹配的索引,或者直到我们到达末尾(这很重要)。一旦命中了一个非键值,我们就会检查当前for循环中的偏移量是否为3或大于初始的for循环。如果是这样的话,我们增加count并按照我们在第二个循环中循环的数量来偏移第一个循环,以确保没有重复的循环。

代码语言:javascript
运行
复制
    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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60594061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档