2013-07-13 5 views
0

У меня есть целочисленный массив crr_array, и я хочу считать элементы, которые повторяются повторно. Во-первых, я читаю размер массива и инициализирую его номерами, считываемыми с консоли. В массиве new_array я сохраняю повторяющиеся элементы. В массиве times хранится количество последовательных вхождений элемента. Затем я пытаюсь выполнить поиск повторяющихся последовательностей и распечатать их в определенном формате. Однако это не работает.Подсчет повторяющихся элементов в целочисленном массиве

// Get integer array size 
Scanner input = new Scanner(System.in); 
System.out.println("Enter array size: "); 
int size = input.nextInt(); 

int[] crr_array = new int[size]; 
int[] new_array= new int[size]; 
int[] times = new int[size]; 

// Read integers from the console 
System.out.println("Enter array elements: "); 
for (int i = 0; i < crr_array.length; i++) { 
    crr_array[i] = input.nextInt(); 
    times[i] = 1; 
} 

// Search for repeated elements 
for (int j = 0; j < crr_array.length; j++) { 
    for (int i = j; i < crr_array.length; i++) { 
     if (crr_array[j] == crr_array[i] && j != i) { 
      new_array[i] = crr_array[i]; 
      times[i]++; 
     } 
    } 
} 



//Printing output 
for (int i = 0; i < new_array.length; i++) { 
    System.out.println("\t" + crr_array[i] + "\t" + new_array[i] + "\t" + times[i]); 

} 

Я хочу, чтобы выход выглядеть следующим образом:

There are <count_of_repeated_element_sequences> repeated numbers 
<repeated_element>: <count> times 
... 

Например:

There are 3 repeated numbers: 
22: 2 times 
4: 3 times 
1: 2 times 

Как я могу найти повторяющиеся элементы и их подсчет? Как я могу напечатать их, как показано выше?

+0

Итак, ** **, что это проблема? Что такое 'y'? Как насчет выбора лучших имен, которые на самом деле говорят, что представляет переменная? Это поможет вам, в первую очередь. –

+0

Где ваш входной массив? – Makky

ответ

4

Такого рода проблемы могут быть легко решены с помощью словарей (HashMap в Java).

// The solution itself 
    HashMap<Integer, Integer> repetitions = new HashMap<Integer, Integer>(); 

    for (int i = 0; i < crr_array.length; ++i) { 
     int item = crr_array[i]; 

     if (repetitions.containsKey(item)) 
      repetitions.put(item, repetitions.get(item) + 1); 
     else 
      repetitions.put(item, 1); 
    } 

    // Now let's print the repetitions out 
    StringBuilder sb = new StringBuilder(); 

    int overAllCount = 0; 

    for (Map.Entry<Integer, Integer> e : repetitions.entrySet()) { 
     if (e.getValue() > 1) { 
      overAllCount += 1; 

      sb.append("\n"); 
      sb.append(e.getKey()); 
      sb.append(": "); 
      sb.append(e.getValue()); 
      sb.append(" times"); 
     } 
    } 

    if (overAllCount > 0) { 
     sb.insert(0, " repeated numbers:"); 
     sb.insert(0, overAllCount); 
     sb.insert(0, "There are "); 
    } 

    System.out.print(sb.toString()); 
+0

Я хотел использовать только основы, если вы можете мне помочь без java-классов –

+0

еще раз спасибо Я пробовал это так //////// // Как я могу отправить вам, что этот комментарий не может позволить мне вставить код –

+0

Вы гений сэр, что сообщение действительно помогло мне в моем задании. Большое спасибо. –

0
for (int i = 0; i < x.length; i++) { 

    for (int j = i + 1; j < x.length; j++) { 

     if (x[i] == x[j]) { 
      y[i] = x[i]; 
      times[i]++; 
     } 

    } 

} 
0

с О (п журнал (п))

int[] arr1; // your given array 
int[] arr2 = new int[arr1.length]; 
Arrays.sort(arr1); 

for (int i = 0; i < arr1.length; i++) { 
    arr2[i]++; 
    if (i+1 < arr1.length) 
    { 
     if (arr1[i] == arr1[i + 1]) { 
      arr2[i]++; 
      i++; 
     } 
    } 
} 

for (int i = 0; i < arr1.length; i++) { 
    if(arr2[i]>0) 
    System.out.println(arr1[i] + ":" + arr2[i]); 
} 
+0

Это O nlog (n). Не на). –

+0

hımm я думал второй раз, и мне кажется, что o (n), я не мог понять O (log (n)) –

+0

Вы сортируете массив перед выполнением обработки.Общая сложность для среднего случая (в зависимости от типа сортировки по java) - это O (N * LogN) + O (N) для обработки массива. –

0

Вы должны использовать или читать об ассоциативных массивов, или карты, .. и т.д.. Сохраняя количество вхождений повторяющихся элементов в массиве и удерживая другой массив для повторяющихся элементов, не имеет большого смысла.

Ваша проблема в вашем коде во внутреннем цикле

for (int j = i + 1; j < x.length; j++) { 

     if (x[i] == x[j]) { 
      y[i] = x[i]; 
      times[i]++; 
     } 

    } 
5

Если у вас есть значения в короткий набор возможных значений, то вы можете использовать что-то вроде Counting Sort

Если нет, вы должны использовать другую структуру данных, как словарь, в Java с Map

int[] array 
Map<Integer, Integer> 

, где ключ = значение массива, например, массив [I] и значение счетчика =

Пример:

int[] array = new int [50]; 
Map<Integer,Integer> counterMap = new HashMap<>(); 

//fill the array 

    for(int i=0;i<array.length;i++){ 
     if(counterMap.containsKey(array[i])){ 
      counterMap.put(array[i], counterMap.get(array[i])+1); 
     }else{ 
      counterMap.put(array[i], 1); 
     } 
    } 
+0

это отличный код ... –

+0

Я хотел использовать только основы, я хочу, если вы можете мне помочь без классов java –

2
public class DuplicationNoInArray { 

    /** 
    * @param args 
    *   the command line arguments 
    */ 
    public static void main(String[] args) throws Exception { 
     int[] arr = { 1, 2, 3, 4, 5, 1, 2, 8 }; 
     int[] result = new int[10]; 
     int counter = 0, count = 0; 
     for (int i = 0; i < arr.length; i++) { 
      boolean isDistinct = false; 
      for (int j = 0; j < i; j++) { 
       if (arr[i] == arr[j]) { 
        isDistinct = true; 
        break; 
       } 
      } 
      if (!isDistinct) { 
       result[counter++] = arr[i]; 
      } 
     } 
     for (int i = 0; i < counter; i++) { 
      count = 0; 
      for (int j = 0; j < arr.length; j++) { 
       if (result[i] == arr[j]) { 
        count++; 
       } 

      } 
      System.out.println(result[i] + " = " + count); 

     } 
    } 
} 
0
package jaa.stu.com.wordgame; 

/** 
* Created by AnandG on 3/14/2016. 
*/ 
public final class NumberMath { 
    public static boolean isContainDistinct(int[] arr) { 

     boolean isDistinct = true; 
     for (int i = 0; i < arr.length; i++) 

     { 

      for (int j = 0; j < arr.length; j++) { 
       if (arr[i] == arr[j] && i!=j) { 
        isDistinct = false; 
        break; 
       } 
      } 

     } 
     return isDistinct; 
    } 
    public static boolean isContainDistinct(float[] arr) { 

     boolean isDistinct = true; 
     for (int i = 0; i < arr.length; i++) 

     { 

      for (int j = 0; j < arr.length; j++) { 
       if (arr[i] == arr[j] && i!=j) { 
        isDistinct = false; 
        break; 
       } 
      } 

     } 
     return isDistinct; 
    } 
    public static boolean isContainDistinct(char[] arr) { 

     boolean isDistinct = true; 
     for (int i = 0; i < arr.length; i++) 

     { 

      for (int j = 0; j < arr.length; j++) { 
       if (arr[i] == arr[j] && i!=j) { 
        isDistinct = false; 
        break; 
       } 
      } 

     } 
     return isDistinct; 
    } 
    public static boolean isContainDistinct(String[] arr) { 

     boolean isDistinct = true; 
     for (int i = 0; i < arr.length; i++) 

     { 

      for (int j = 0; j < arr.length; j++) { 
       if (arr[i] == arr[j] && i!=j) { 
        isDistinct = false; 
        break; 
       } 
      } 

     } 
     return isDistinct; 
    } 
    public static int[] NumberofRepeat(int[] arr) { 

     int[] repCount= new int[arr.length]; 
     for (int i = 0; i < arr.length; i++) 

     { 

      for (int j = 0; j < arr.length; j++) { 
       if (arr[i] == arr[j]) { 
        repCount[i]+=1; 
       } 
      } 

     } 
     return repCount; 
    } 
} 


call by NumberMath.isContainDistinct(array) for find is it contains repeat or not 

вызова с помощью INT [] повтора = NumberMath.NumberofRepeat (массив) для подсчета находка повторов. Каждая ячейка содержит сколько повторить соответствующее значение массива ...

-1
public class FindRepeatedNumbers 
{ 
public static void main(String[] args) 
    { 
    int num[]={1,3,2,4,1,2,4,6,7,5}; 
      Arrays.sort(num); 

    for(int j=1;j<num.length;j++) 
     { 
     if(num[j]==num[j-1]) 
    { 
      System.out.println(num[j]); 

     } 
    } 

     } 
    } 
0
public static void main(String[] args) { 
    Scanner input=new Scanner(System.in); 
    int[] numbers=new int[5]; 
    String x=null; 
    System.out.print("enter the number 10:"+"/n"); 
    for(int i=0;i<5;i++){ 
     numbers[i] = input.nextInt(); 
    } 
    System.out.print("Numbers : count"+"\n"); 
    int count=1; 
    Arrays.sort(numbers); 
    for(int z=0;z<5;z++){ 
     for(int j=0;j<z;j++){ 
      if(numbers[z]==numbers[j] & j!=z){ 
       count=count+1; 
      } 
     } 
     System.out.print(numbers[z]+" - "+count+"\n"); 
     count=1; 

    } 
0
public class ArrayDuplicate { 
private static Scanner sc; 
static int totalCount = 0; 

    public static void main(String[] args) { 
     int n, num; 
     sc = new Scanner(System.in); 
     System.out.print("Enter the size of array: "); 
     n =sc.nextInt(); 
     int[] a = new int[n]; 
     for(int i=0;i<n;i++){ 
      System.out.print("Enter the element at position "+i+": "); 
      num = sc.nextInt(); 
      a[enter image description here][1][i]=num; 
     } 
     System.out.print("Elements in array are: "); 
     for(int i=0;i<a.length;i++) 
      System.out.print(a[i]+" "); 
     System.out.println(); 
     duplicate(a); 
     System.out.println("There are "+totalCount+" repeated numbers:"); 
    } 

    public static void duplicate(int[] a){ 
     int j = 0,count, recount, temp; 
     for(int i=0; i<a.length;i++){ 
      count = 0; 
      recount = 0; 
      j=i+1; 
      while(j<a.length){ 
       if(a[i]==a[j]) 
        count++; 
       j++; 
      } 
      if(count>0){ 
       temp = a[i]; 
       for(int x=0;x<i;x++){ 
        if(a[x]==temp) 
         recount++; 
       } 
       if(recount==0){     
        totalCount++; 
        System.out.println(+a[i]+" : "+count+" times"); 
       } 
      } 

     } 
    } 

} 
0
package com.core_java; 

import java.util.Arrays; 
import java.util.Scanner; 

public class Sim { 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     System.out.println("Enter array size: "); 
     int size = input.nextInt(); 

     int[] array = new int[size]; 

     // Read integers from the console 
     System.out.println("Enter array elements: "); 
     for (int i = 0; i < array.length; i++) { 
      array[i] = input.nextInt(); 
     } 
     Sim s = new Sim(); 
     s.find(array); 
    } 

    public void find(int[] arr) { 
     int count = 1; 
     Arrays.sort(arr); 

     for (int i = 0; i < arr.length; i++) { 

      for (int j = i + 1; j < arr.length; j++) { 
       if (arr[i] == arr[j]) { 
        count++; 
       } 
      } 
      if (count > 1) { 
       System.out.println(); 
       System.out.println("repeated element in array " + arr[i] + ": " + count + " time(s)"); 
       i = i + count - 1; 
      } 
      count = 1; 
     } 
    } 

} 
+0

Самый простой способ найти счетчик повторяющихся элементов в целочисленном массиве – Manas

Смежные вопросы