Software Engineering

Cut up after which add each side of an array collectively in Java

Cut up after which add each side of an array collectively in Java
Written by admin


The problem

You’ll obtain an array as a parameter that incorporates 1 or extra integers and a quantity n.

Here’s a little visualization of the method:

  • Step 1: Cut up the array in two:[1, 2, 5, 7, 2, 3, 5, 7, 8] / [1, 2, 5, 7] [2, 3, 5, 7, 8]
  • Step 2: Put the arrays on prime of one another: [1, 2, 5, 7] [2, 3, 5, 7, 8]
  • Step 3: Add them collectively:[2, 4, 7, 12, 15]

Repeat the above steps n occasions or till there is just one quantity left, after which return the array.

Instances

Enter: arr=[4, 2, 5, 3, 2, 5, 7], n=2

Spherical 1
-------
step 1: [4, 2, 5]  [3, 2, 5, 7]

step 2:    [4, 2, 5]
        [3, 2, 5, 7]

step 3: [3, 6, 7, 12]

Spherical 2
-------
step 1: [3, 6]  [7, 12]

step 2:  [3,  6]
         [7, 12]

step 3: [10, 18]


Outcome: [10, 18]

The answer in Java code

Choice 1:

import static java.util.Arrays.copyOfRange;

class Answer {
  static int[] splitAndAdd(int[] numbers, int n) {
    if (numbers.size > 1 && n > 0) {
      int[] half = copyOfRange(numbers, numbers.size / 2, numbers.size);
      for (int i = 0; i < numbers.size / 2; i++) {
        half[numbers.length % 2 > 0 ? i + 1 : i] += numbers[i];
      }
      return splitAndAdd(half, n - 1);
    }
    return numbers;
  }
}

Choice 2:

public class Answer {
    public static int[] splitAndAdd(int[] arr, int n) 
}

Choice 3:

public class Answer {
    public static int[] splitAndAdd(int[] numbers, int n) {
        if (n == 0) return numbers;
        remaining int len = numbers.size;
        remaining int subsequent[] = new int[(len+1)/2];
        for (int i = 0; i < subsequent.size; i++) subsequent[i] += numbers[len/2+i];
        for (int i = len/2-1, j=subsequent.length-1; i >= 0; i--,j--) subsequent[j] += numbers[i];
        return splitAndAdd(subsequent, n-1);
    }
}

Take a look at circumstances to validate our resolution

import org.junit.Take a look at;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
import java.util.*;

public class TestClass {
    @Take a look at
    public void splitAndAdd() throws Exception {
        
        int[] anticipated = new int[]{5,10};
        int[] enter = Answer.splitAndAdd(new int[]{1,2,3,4,5},2);

        assertEquals(Arrays.toString(anticipated), Arrays.toString(enter));

        anticipated = new int[]{15};
        enter = Answer.splitAndAdd(new int[]{1,2,3,4,5},3);

        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));
        
        anticipated = new int[]{15};
        enter = Answer.splitAndAdd(new int[]{15},3);

        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));
        
        anticipated = new int[]{183, 125};
        enter = Answer.splitAndAdd(new int[]{32,45,43,23,54,23,54,34},2);

        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));
        
        anticipated = new int[]{32,45,43,23,54,23,54,34};
        enter = Answer.splitAndAdd(new int[]{32,45,43,23,54,23,54,34},0);

        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));

        anticipated = new int[]{305, 1195};
        enter = Answer.splitAndAdd(new int[]{3,234,25,345,45,34,234,235,345},3);

        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));

        anticipated = new int[]{1040, 7712};
        enter = Answer.splitAndAdd(new int[]{3,234,25,345,45,34,234,235,345,34,534,45,645,645,645,4656,45,3},4);

        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));
        
        anticipated = new int[]{79327};
        enter = Answer.splitAndAdd(new int[]{23,345,345,345,34536,567,568,6,34536,54,7546,456},20);
        
        assertEquals(Arrays.toString(anticipated),Arrays.toString(enter));
    }
}

About the author

admin

Leave a Comment