Java:给定一个数字,在数组

时间:2017-12-03 08:51:03

标签: java arrays

我是Java编程(或编程实际)的新手。

我有一个数组,其中只包含46 。给定一个数字46,找到给定数字的最高连续出现次数。

我需要最高的顺序发生次数

示例:arr[{4,4,6,6,4,4,4,4,4,6}]

如果给出上述数组,并且下一个输入数字为4,则输出应为5。因为数字4已连续发生5次。

public static void main(String[] args) throws IOException {
String arrayTK = br.readLine(); // Input is 4466444446
int[] inpArray = new int[10];
for (int i = 0; i < 10; i++) {
    inpArray[i] = arrayTK.charAt(i) - '0';
}
int maxSequenceTimes = 0;
for (int j = 0; j < 10; j++) {
    // Logic
}}

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

修改

我们将分离并计算所有序列,然后在每个序列中搜索以知道哪个序列包含最大长度。

int[] arr = {4,4,6,6,4,4,4,4,4,6};

    boolean newSeq = false;
    int diffrentSeq = 0;
    int currentNumber;
    //Get sequence numbers
    for (int i = 0; i < arr.length; i++) {
        currentNumber = arr[i];
        if (i >= 1 && currentNumber != arr[i - 1])
            newSeq = true;
        else if (i == 0)
            newSeq = true;

        //It's new sequence!!
        if (newSeq) {
            diffrentSeq++;
            newSeq = false;
        }
    }
    System.out.println(diffrentSeq);
    int[] maxSequencSize = new int[diffrentSeq];
    int lastIndex = 0;
    for (int i = 0; i < maxSequencSize.length; i++) {
        int currentNum = arr[lastIndex];
        for (int j = lastIndex; j < arr.length; j++) {
            if (arr[j] == currentNum) {
                maxSequencSize[i]++;
                lastIndex = j + 1;
            } else break;
        }
    }

    System.out.println(max(maxSequencSize));

您需要获取最大序列长度的最大值:

 private static int max(int[] array){

    int maxVal = 0;
    for (int anArray : array) {
        if (anArray > maxVal)
            maxVal = anArray;
    }

    return maxVal;
}

答案 1 :(得分:0)

你需要这样的东西:

import java.util.Scanner;

public class A {

    public static void main(String[] args)  {
        Scanner br =new Scanner(System.in);
        String str = br.next();
        int arr[]=new int[str.length()];
        for(int i=0;i<str.length();i++)
        {
            arr[i]=str.charAt(i)-'0';
            //System.out.println(arr[i]);
        }
        int j=0;
        int count=1,max=0;
        for(int i=0;i<str.length();i++)
        {

            if(i==0){
            j=arr[i];

            }
            else
            {
                if(arr[i]==j)
                {
                    count++;
                //System.out.println("  "+count);   
                }
                else
                {

                    if(max<count){
                        max=count;
                    }
                    count=1;
                    j=arr[i];

                }
            }
        }
        if(max<count){
            max=count;
        }

        System.out.println(max);

        }
}

答案 2 :(得分:0)

那应该做的工作。每当你找到匹配值时,你就开始计算,当条纹结束时,你将长度与你到目前为止找到的最大长度进行比较。

public int logic(int[] inpArray, int num) {
    int count = 0, max = 0 

    for(int i = 0; i < 10; ++i){
        if(inpArray[i] == num) {
            count++
        else{
            if(count > max)
                max = count;
            count = 0;
        }
    }
    if (count > max)
        max = count;

    return max;
}

答案 3 :(得分:0)

String arrayTK = br.readLine(); // Input is 4466444446

因为您的第一个输入是字符串,所以您不需要将其转换为int数组,如果您使用的话,可以使用:

String arrayTK = "4466444446";
int result = Arrays.asList(arrayTK.replaceAll("(\\d)((?!\\1|$))", "$1;$2").split(";"))
        .stream().max(Comparator.comparingInt(String::length)).get().length();
System.out.println(result);

说明:

  • arrayTK.replaceAll("(\\d)((?!\\1|$))", "$1;$2")在每两个不同的数字之间放置一个分隔符,结果应为44;66;44444;6

  • .split(";")与此分隔符分开(在本例中我使用了;)结果为["44", "66", "44444", "6"]

  • stream().max(Comparator.comparingInt(String::length)).get()获取最大输入

  • .length()返回结果的长度

Ideone demo

修改

  

我如何修改它,以计算任何特定数字。我的意思是,最大连续出现数字4

在这种情况下,您只需添加一个过滤器.filter(t -> t.matches(number + "+")),这意味着只获取与4+匹配的数字,其中4可以是任意数字:

...
int number = 6;
int result = Arrays.asList(arrayTK.replaceAll("(\\d)((?!\\1|$))", "$1;$2").split(";"))
        .stream()
        .filter(t -> t.matches(number + "+"))
        .max(Comparator.comparingInt(String::length)).get().length();