Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #38835
| 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 |
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 | Next — Previous in thread | Find similar
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