Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #38835

Re: Interview question - better solution for MergePurgeAndReverseOrder()

Newsgroups comp.lang.java.programmer
Date 2019-03-29 15:40 -0700
References <q7lbvc$152e$1@gioia.aioe.org>
Message-ID <1738bf0a-0af9-4ff1-9c54-35d2b9fa0562@googlegroups.com> (permalink)
Subject Re: Interview question - better solution for MergePurgeAndReverseOrder()
From bursejan@gmail.com

Show all headers | View raw


The word "implement" got a total new meaning. 

Did they notice that you didn't implement 
anything, only used some library calls in the
most complicated way. 

Basically if the two input vectors are already 
sorted, you would possibly implement something 
totally different. Namely a pairing algorithm, 

which reads as follows:

   public static int[] merge(int[] a, int[] b) {
      int[] res=new int[a.length+b.length];
      int i=0;
      int j=0;
      int k=0;
      while (j<a.length && k<b.length) {
         if (a[j]<b[k]) {
            res[i++]=a[j++];
         } else {
            res[i++]=b[k++];
         }
      }
      while (j<a.length)
            res[i++]=a[j++];
      while (k<b.length)
            res[i++]=b[k++];
      return res;
   }

For simplicity, to make the point, the above is without
reverse/duplicate/null. The name "merge" tells me that 
this was asked. Otherwise it would be "union" and 

not "merge". Here is an example run. 

    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3};
        int[] b = new int[]{1, 2, 3, 4};
        int[] res = merge(a, b);
        for (int i = 0; i < res.length; i++)
            System.out.println("res[" + i + "]=" + res[i]);
    }

Thats the output:

res[0]=1
res[1]=1
res[2]=2
res[3]=2
res[4]=3
res[5]=3
res[6]=4

On Friday, March 29, 2019 at 4:01:13 PM UTC+1, Graeme Geldenhuys wrote:
> Hi,
> 
> I recently attended a Java developer interview and had to implement the
> MergePurgeAndReverseSort() method. I managed to complete it and
> afterwards wrote some unit tests to confirm that it works. But is there
> a better way to implement it, or did I do an okay job about it.
> 
> I can post the unit tests too if that might help.
> 
> Any feedback would be very much appreciated.
> 
> Regards,
>   Graeme
> 
> 
> 
> ***********************************************
> public class Main {
> 
> 	public static void main(String[] args) {
> 		Integer[] v1 = new Integer[] { 1, 2, null, 3 };
> 		Integer[] v2 = new Integer[] { 1, 2, 3, 4 };
> 		int[] arr = Util.MergePurgeAndReverseSort(v1, v2, true);
> 
> 		for (int i = 0; i < arr.length; i++)
> 			System.out.println(arr[i]);
> 
> 	}
> 
> }
> 
> ***********************************************
> 
> import java.util.Collections;
> import java.util.HashSet;
> import java.util.List;
> import java.util.Set;
> import java.util.stream.Collectors;
> 
> public class Util {
> 
> 	/*
> 	 * [x] Merge the two arrays
> 	 * [x] remove duplicates
> 	 * [x] remove NULL's
> 	 * [x] sort in reverse order
> 	 * [x] return as an int[] array
> 	 */
> 	public static int[] MergePurgeAndReverseSort(Integer[] values1,
> Integer[] values2, boolean reverse) {
> 		// merge arrays
> 		Integer[] v1andv2 = new Integer[values1.length + values2.length];
> 		System.arraycopy(values1, 0, v1andv2, 0, values1.length);
> 		System.arraycopy(values2, 0, v1andv2, values1.length, values2.length);
> 
> 		// Use a set to remove duplicates
> 		Set<Integer> intSet = new HashSet<>();
> 		for (Integer item : v1andv2) {
> 			// We could check for null's here too, or handle it separately as
> shown below
> 			if (item != null)
> 				intSet.add(item);
> 		}
> 
> 		// sort in reverse order
> 		List<Integer> lst;
> 		if (reverse)
> 			lst =
> intSet.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList());
> 		else
> 			lst = intSet.stream().sorted().collect(Collectors.toList());
> 
> 
> 		// unbox data
> 		int[] n = lst.stream().mapToInt(Integer::intValue).toArray();
> 
> 		return n;
> 	}
> }
> 	
> ***********************************************

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Find similar


Thread

Interview question - better solution for MergePurgeAndReverseOrder() Graeme Geldenhuys <graemeg@example.net> - 2019-03-29 15:01 +0000
  Re: Interview question - better solution for MergePurgeAndReverseOrder() Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-03-29 11:19 -0400
    Re: Interview question - better solution for MergePurgeAndReverseOrder() Graeme Geldenhuys <graemeg@example.net> - 2019-03-29 16:42 +0000
      Re: Interview question - better solution for MergePurgeAndReverseOrder() Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-03-29 13:47 -0400
        Re: Interview question - better solution for MergePurgeAndReverseOrder() Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-03-29 13:53 -0400
        Re: Interview question - better solution for MergePurgeAndReverseOrder() Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2019-03-29 19:42 +0100
  Re: Interview question - better solution for MergePurgeAndReverseOrder() Graeme Geldenhuys <graemeg@example.net> - 2019-03-29 16:53 +0000
    Re: Interview question - better solution for MergePurgeAndReverseOrder() Eric Douglas <e.d.programmer@gmail.com> - 2019-03-29 10:19 -0700
    Re: Interview question - better solution for MergePurgeAndReverseOrder() Jukka Lahtinen <jtfjdehf@hotmail.com.invalid> - 2019-03-30 11:23 +0200
      Re: Interview question - better solution for MergePurgeAndReverseOrder() Graeme Geldenhuys <graemeg@example.net> - 2019-03-30 11:16 +0000
  Re: Interview question - better solution for MergePurgeAndReverseOrder() Eric Douglas <e.d.programmer@gmail.com> - 2019-03-29 13:20 -0700
    Re: Interview question - better solution for MergePurgeAndReverseOrder() Graeme Geldenhuys <graemeg@example.net> - 2019-03-30 11:21 +0000
      Re: Interview question - better solution for MergePurgeAndReverseOrder() Eric Douglas <e.d.programmer@gmail.com> - 2019-04-01 04:56 -0700
  Re: Interview question - better solution for MergePurgeAndReverseOrder() bursejan@gmail.com - 2019-03-29 15:40 -0700

csiph-web