Oppgave 1
public static int[] nestMaks(int[] a) // en turnering { int n = a.length; // for å forenkle notasjonen if (n < 2) // må ha minst to verdier! throw new IllegalArgumentException("a.length(" + n + ") < 2!"); int[] b = new int[2*n]; // turneringstreet System.arraycopy(a,0,b,n,n); // legger a bakerst i b for (int k = 2*n-2; k > 1; k -= 2) // lager turneringstreet b[k/2] = Math.max(b[k],b[k+1]); System.out.println(Arrays.toString(b)); // utskrift av b int maksverdi = b[1], nestmaksverdi = Integer.MIN_VALUE; for (int m = 2*n - 1, k = 2; k < m; k *= 2) { int tempverdi = b[k+1]; // ok hvis maksverdi er b[k] if (maksverdi != b[k]) { tempverdi = b[k]; k++; } if (tempverdi > nestmaksverdi) nestmaksverdi = tempverdi; } return new int[] {maksverdi,nestmaksverdi}; // størst og nest størst } // nestMaks
Oppgave 2
Fasit mangler.
Oppgave 3
public static void kopier(int[] a, int i, int[] b, int j, int ant) { for (int n = i + ant; i < n; ) b[j++] = a[i++]; }
Oppgave 4
// kopierer a først i b System.arraycopy(a, 0, b, 0, a.length); // kopierer a bakerst i b System.arraycopy(a, 0, b, b.length - a.length,a.length); // kopierer a på midten av b System.arraycopy(a, 0, b, (b.length - a.length)/2,a.length);