Anzahl vorkommender Elemente im Array zählen

Kirby.exe

Top Contributor
Wir haben die nachfolgende Aufgabe als Übung bekommen:
Bildschirmfoto 2020-04-08 um 09.39.36.png

Ich habe es einfach mal probiert in Java umzusetzen und muss gestehen...effizient ist etwas anderes xD Könnte mir jemand Tipps geben diese Aufgabe in Zukunft effizienter zu lösen 🙂

Hier ist der Code:
Java:
   public static void main(String[] args) {
        int[] numbers = {2,4,3,2,2,1,4,5};
        searchDuplicates(numbers);
    }
   
    public static void searchDuplicates(int[] numbers) {
        int tempValue = 0;
        int[] used = new int[numbers.length];
        int arrayCounter = 0;
        int counter = 0;
        for(int i = 0; i < numbers.length; i++) {
            tempValue = numbers[i];
            if(!existanceCheck(used, tempValue)) {
                used[arrayCounter] = tempValue;
                arrayCounter++;
                for(int j = 0; j < numbers.length; j++) {
                    if(tempValue == numbers[j]) {
                        counter++;
                    }
                }
                System.out.println("Die Zahl " + tempValue + " kommt " + counter + " mal im Array vor!");
                counter = 0;
            }
        }
    }
   
    public static boolean existanceCheck(int[] arr, int number) {
        for(int i = 0; i < arr.length; i++) {
            if(number == arr[i]) {
                return true;
            }
        }
        return false;
    }

Edit: Meine Lösung ist falsch...Ich habe die Aufgabenstellung falsch verstanden xD Naja dann ist es relativ einfach xD Ihr könnt ja trotzdem diesen Code optimieren 🙂
 
Ist HashMap erlaubt oder sollt ihr die Vorkommen "mit einem Array zählen"?
 
Nö, wofür? Wir helfen bei gezielten Fragen
Mich würde einfach interessieren wie Ihr es lösen würdet 🙂 Ich hatte es so verstanden, dass gezählt werden soll wie oft jede Zahl im Array vorkommt(was natürlich nicht die richtige Aufgabenstellung ist), es würde mich dennoch interessieren meinen Algorithmus in Zukunft effizienter zu gestalten 🙂
 
Ich hätte es so gemacht 😉
Java:
	public static void searchDuplicates(int[] numbers, int k) {
		int[] temp = Arrays.copyOf(numbers, numbers.length);
		Arrays.sort(temp);
		int first = 0;
		for (int i = 1; i <= temp.length; i++) {
			if (i == temp.length || temp[i] != temp[first]) {
				int n = i - first;
				if (n >= k) {
					System.out.println(temp[first] + " kommt so oft vor: " + n);
				}
				first = i;
			}
		}
	}

	public static void main(String[] args) {
		int[] a = { 1, 1, 1, 1, 0, 0, -1, -1, 5, 5, 5, 5, 5, 5, 4 };
		searchDuplicates(a, 1);
		System.out.println(Arrays.toString(a));
	}
 
Das mit dem simplen Array kann ich mir kaum vorstellen, immerhin sagt die Aufgabenstellen n ganze Zahlen, nicht Zahlen von 1-9 oder sowas.

Besser wäre es schon eine Map zu haben, bei der der Key die Zahl ist und der Value die Häufigkeit. Dann musst du die Map nur nochmal iterieren und alle Keys ausgeben, bei denen der Value größer als k ist.
 

Zurück
Oben