code: import java.util.Arrays;
  
  public class Deconvolution1D {
      public static int[] deconv(int[] g, int[] f) {
          int[] h = new int[g.length - f.length + 1];
          for (int n = 0; n < h.length; n++) {
              h[n] = g[n];
              int lower = Math.max(n - f.length + 1, 0);
              for (int i = lower; i < n; i++)
                  h[n] -= h[i] * f[n - i];
              h[n] /= f[0];
          }
          return h;
      }
  
      public static void main(String[] args) {
          int[] h = { -8, -9, -3, -1, -6, 7 };
          int[] f = { -3, -6, -1, 8, -6, 3, -1, -9, -9, 3, -2, 5, 2, -2, -7, -1 };
          int[] g = { 24, 75, 71, -34, 3, 22, -45, 23, 245, 25, 52, 25, -67, -96,
                  96, 31, 55, 36, 29, -43, -7 };
  
          StringBuilder sb = new StringBuilder();
          sb.append("h = " + Arrays.toString(h) + "\n");
          sb.append("deconv(g, f) = " + Arrays.toString(deconv(g, f)) + "\n");
          sb.append("f = " + Arrays.toString(f) + "\n");
          sb.append("deconv(g, h) = " + Arrays.toString(deconv(g, h)) + "\n");
          System.out.println(sb.toString());
      }
  }
  