我是Java的新手,我在做数组排序问题,但在解决这个问题上遇到了困难。 搜索过类似或重复的帖子,但似乎没有找到任何帖子。

问题是“在数组中查找最相同的相邻元素,并将其写入新数组中”。

我的问题是。 如何将另一个数组中出现的大多数相邻元素存储在一个数组中?

到目前为止,这是我提出的。

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

int counter=0;
int i = 0;
int length = arr.length;
int[] resultArr=new int[length];



for (i=1; i<length; i++)

    {
   if (arr[i-1]==arr[i])
    {
     counter++;      // Counter to represent maximal adjacent occurred elem.
     resultArr[i] = arr[i]  //Writing elements in result array
    }





} 
 System.out.println(counter);  
 System.out.println(resultArr);     

 Input: It is the test array "arr"

 Output 1 : Shoud be 4 representing the maximum of same adjacent elements ( i.e the 2's in the array )
 Output 2 : Must be an array that contains the 4 elements of the array ({2, 2, 2 ,2} )

我的输出是(直接从控制台)

1
[I @ 6d06d69c

===============>>#1 票数:0

你正在做的两个错误在你的代码,首先你使用的是相同的索引i为您的输入数组arr和结果数组resultArr ,你应该使用不同的一个resultArr这样

int resultArrIndex = 0;
for (i=1; i<length; i++)
{
  if (arr[i-1]==arr[i])
  {
    counter++;      // Counter to represent maximal adjacent occurred elem.
    resultArr[resultArrIndex] = arr[i]  //Writing elements in result array
    resultArrIndex++;
  }
} 

其次,这不是打印数组的方法,您可以在这样的for循环中进行打印

for (int i = 0; i < resultArr.length; i++) {
  System.out.println(resultArr[i]);  // will print each in a line
}

或像这样

System.out.println(Arrays.toString(resultArr));  // Print all in one line

===============>>#2 票数:0 已采纳

分解问题,首先是一种确定相邻值运行何时停止的方法。

private static int runsTo(int[] vals, int index) {
    for (int i = index; i < vals.length - 1; i++) {
        if (vals[i] != vals[i + 1]) {
            return i;
        }
    }
    return vals.length;
}

然后,我们可以将其与Arrays.toString(int[]) 1以及Arrays.copyOfRange(int[], int, int)

int[] arr = { 2, 1, 1, 3, 3, 2, 2, 2, 2, 1, 1 };
int index = 0, count = 0;
for (int i = 0; i < arr.length; i++) {
    int r = runsTo(arr, i);
    int c = r - i + 1;
    if (c > count) {
        index = i;
        count = c;
        i += count - 1;
    }
}
System.out.println(Arrays.toString(arr));
System.out.printf("Starting from %d get %d%n", index, count);
System.out.println(Arrays.toString(Arrays.copyOfRange(arr, index, index + count)));

哪个输出

[2, 1, 1, 3, 3, 2, 2, 2, 2, 1, 1]
Starting from 5 get 4
[2, 2, 2, 2]

1 Java数组不会覆盖toString() ,因此您正在获取数组的哈希码。

===============>>#3 票数:0

这是您的解决方案:

package com.sujit;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Test {
    public static int count = 0;
    public static void main(String[] args) {
        Integer[] arr= {2, 1, 1, 3, 3, 2, 2, 2, 2, 1 ,1}; //test array
        List<Integer> resultList =Arrays.asList(arr);
        List<Integer> maxOccurence = new ArrayList<Integer>();
        Set<Integer> set = new HashSet<>();

        for (Integer integer : resultList) {
            set.add(integer);
        }
        for (Integer integer : set) {
            int freq = Collections.frequency(resultList, integer);
            maxOccurence.add(freq);
            System.out.println("Element : "+integer+"  Occurences= "+freq);
        }
        System.out.println(Collections.max(maxOccurence));
    }
}

  ask by Veselin Lalov translate from so

未解决问题?本站智能推荐: