数组的难度

时间:2012-02-28 09:59:20

标签: java

我有点陷入困境,所以如果有人有空闲时间,那对我来说将是一个很大的帮助。我正在使用eclipse,程序正在编译和运行。但是存在运行时错误。 在数组中{2,1,1,2,3,3,2,2,2,1}我想打印{2,2,2},这是数组中重复次数最多的数字。我得到的是: 0 1 0 0 3 0 2 2 0

谢谢大家,这是我的代码。

public class SameIndexInArray
{
    public static void main(String[] args) 
    {
        int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};
        int[] subarray = new int[array.length]; //store the values should be {2, 2, 2}

        int max = 1;
        int total = 1;

        for(int i=0; i<array.length-1; i++)
        {
            if(array[i] != array[i + 1])
            {
                max = 1;
            }
            else if(array[i] == array[i + 1])
            {
                max++;
                total = max;
                subarray[i] = array[i]; // here is the issue
            }
            System.out.println(subarray[i]);
        }
        //System.out.println(total);
    }
}

6 个答案:

答案 0 :(得分:2)

你只是兼顾地存储到子阵列中,所以你应该为子阵列索引计数定义一个单独的计数器(比方说j),然后说子阵列[j ++] = array [i]。并且,您不应为每个数组索引输出子数组,因此将该println移动到第二个if子句中。

答案 1 :(得分:2)

看看是否有效

    int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};

    int frequency = 0;
    int num = 0;

    for(int i=0; i<array.length-1; i++)
    {
        int lfreq = 1;
        int lnum = array[i];
        while(array[i] == array[i+1]){
            lfreq++;
            i++;
        }
        if(lfreq >= frequency){
            frequency = lfreq;
            num = lnum;
        }

    }
    int[] subarray = new int[frequency];
    for(int i=0; i < frequency; i++)
        subarray[i] = num;

    System.out.println(Arrays.toString(subarray));

答案 2 :(得分:1)

你需要使用另一个索引但是“我” 您无法与具有相同索引的2个数组相关联

答案 3 :(得分:1)

你的问题是子阵列中的所有值都是用0初始化的,只有在存在实际序列时才编辑值,从第二个元素开始。

整个子阵列是不必要的。只需保存起始索引和子查询的长度;)

我的意思是这样的:

int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};

int startIndex = 0;
int length = 0;

int longestIndex = 0;
int longestLength = 0;

for(int i=0; i<array.length-1; i++)
{
    if(array[i] != array[i + 1])
    {
        if (length > longestLength) {
            longestLength = length;
            longestIndex = startIndex;
        }
        startIndex = i;
        length = 1;
    }
    else if(array[i] == array[i + 1])
    {
        length++;
    }
}

if (length > longestLength) {
    longestLength = length;
    longestIndex = startIndex;
}

现在您知道最长序列的起始位置以及构建新阵列的时间长度:

int[] sequence = new int[longestLength];
for (int i = 0; i < longestLength; i++) {
    sequence[i] = array[i + startIndex];
}

答案 4 :(得分:1)

那是因为你在索引位置“i”插入子阵列。 例如, 循环第二次运行。

array[1] == array[2]为真,

subarray[i] = array[i]; 

运行。所以此时子阵列的内容是{0,1,0,0,0,0,0,0,0}。请注意,默认情况下,数组初始化为0。

这就是你能做到的。

int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};
         //store the values should be {2, 2, 2}

        int max = 1;
        int total = 1;
        int value = 0;
        for(int i=0; i<array.length-1; i++)
        {
            if(array[i] != array[i + 1])
            {
                max = 1;
            }
            else if(array[i] == array[i + 1])
            {
                max++;
                total = max;
                value = array[i];
            }

        }
        int[] subarray = new int[total];
        for(int i=0; i<total; i++)
            subarray[i] = value;

答案 5 :(得分:0)

public static void main(String [] args){

 int[] ar = { 2, 1, 1, 2, 3, 3, 2, 2, 2, 1 };
    int max=0,
        maxStart=0,
        count=1;

    for(int i=1; i<ar.length; i++) {
        if (ar[i-1] == ar[i]) {
            count++;
            if(count > max) {
                max = count;
                maxStart = i-count+1;
            }
        }else {
            count=1;
        }
    }

    System.out.println("Sub array begins from " + maxStart);

    for(int i = maxStart; i < maxStart + max; i++) {
        System.out.print(ar[i] + " ");
    }


}