我有一个整数数组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 :(得分:7)
这种问题可以通过字典(Java中的HashMap)轻松解决。
// 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());
答案 1 :(得分:6)
如果您在一组可能的值中有值,则可以使用Counting Sort
之类的值如果不是,你必须在java a Map
int[] array
Map<Integer, Integer>
其中Key =例如array [i]的数组值,value = a counter
示例:
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);
}
}
答案 2 :(得分: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);
}
}
}
答案 3 :(得分: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]++;
}
}
}
答案 4 :(得分:0)
使用O(n log(n))
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]);
}
答案 5 :(得分:0)
您必须使用或阅读关联数组或地图等。存储重复元素在数组中出现的次数,并为重复的元素本身保存另一个数组,没有多大意义。
您的代码中的问题在内循环中
for (int j = i + 1; j < x.length; j++) {
if (x[i] == x[j]) {
y[i] = x[i];
times[i]++;
}
}
答案 6 :(得分: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 [] repeat = NumberMath.NumberofRepeat(array)调用find find count。每个位置包含多少重复对应的数组值...
答案 7 :(得分: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");
}
}
}
}
}
答案 8 :(得分: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;
}
}
}
答案 9 :(得分:0)
public static void duplicatesInteger(int arr[]){
Arrays.sort(arr);
int count=0;
Set s=new HashSet();
for(int i=0;i<=arr.length-1;i++){
for(int j=i+1;j<=arr.length-1;j++){
if(arr[i]==arr[j] && s.add(arr[i])){
count=count+1;
}
}
System.out.println(count);
}
}
答案 10 :(得分:0)
private static void getRepeatedNumbers(){
int [] numArray = {2,5,3,8,1,2,8,3,3,1,5,7,8,12,134};
Set<Integer> nums = new HashSet<Integer>();
for (int i =0; i<numArray.length; i++) {
if(nums.contains(numArray[i]))
continue;
int count =1;
for (int j = i+1; j < numArray.length; j++) {
if(numArray[i] == numArray[j]) {
count++;
}
}
System.out.println("The "+numArray[i]+ " is repeated "+count+" times.");
nums.add(numArray[i]);
}
}
答案 11 :(得分:-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]);
}
}
}
}