|
OOPS! I'd failed to read the spec correctly. Definitely won't get the job.
|
|
|
|
|
A few moments though gave me this:
int[] data = new int[] { 1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0 };
int outp = 0;
for (int inp = 0; inp < data.Length; inp++)
{
int d = data[inp];
if (d != 0)
{
data[outp++] = d;
}
}
while (outp < data.Length)
{
data[outp++] = 0;
}
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Right... that's the first take, but I used two arrays to pull it off to avoid the second loop.
Jeremy Falcon
|
|
|
|
|
Seriously, I was thinking about this and there is a cheat to the original instructions.
At least in JavaScript. See they just said put all the zeroes at the end.
Well. you can do that in one for loop...
Each time through loop
1. splice off the 0 at its original location.
2. then push it onto the end
Voila!
var data = [ 1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0 ];
for (var x = 0;x<data.length;x++){
if (data[x] == 0){
data.splice(x,1);
data.push(0);
}
}
|
|
|
|
|
That's a good solution and better than my first one that used two arrays. Too bad I didn't think of it two days ago.
Jeremy Falcon
|
|
|
|
|
But internally, the splice() operation is performing an O(N) operation - moving all elements down by one position. Your solution is therefore O(N^2).
If I were the interviewer, I would ask if you can see a problem with this solution, and then ask you for a more efficient (O(N)) solution.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Daniel Pfeffer wrote: If I were the interviewer, I would ask if you can see a problem with this solution, and then ask you for a more efficient (O(N)) solution.
I'd throw my dry-erase marker at my interviewer's forehead and storm out!!
...
Later, they would offer me the job for sticking to my principles.
|
|
|
|
|
And while you're at, can you stop space and time and develop the first programming language used on Mars and feed that back to us?
Then on the actual job... your coworker asks you... what's a box model again? How do you configure Webpack? How do I actually do any of the things my job requires? Well, at least I studied algorithms for a few weeks while interviewing. Phew.
Jeremy Falcon
|
|
|
|
|
Jeremy Falcon wrote: And while you're at, can you stop space and time and develop the first programming language used on Mars and feed that back to us?
Well, we already have the first programming language to be used on Jupiter (JOVIAL)
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Touché!
Jeremy Falcon
|
|
|
|
|
don't you just love the way JS let's you express your thoughts?
|
|
|
|
|
Jeremy Falcon
|
|
|
|
|
Look at this stupid C# code I wrote that allows you to do only one for loop.
int [] data = {0,1,2,0,0,0,0,0,5};
List<int> allData = new List<int>(data);
var originalSize = allData.Count;
var counter=0;
for (int x =0;counter<=originalSize;x++){
if (allData[x]== 0){
Console.WriteLine($"got 0 : {x}");
allData.RemoveAt(x--);
allData.Add(0);
}
counter++;
}
data = allData.ToArray();
Console.WriteLine(data);
I've provided multiple data sets to test the data. It works.
EDIT
i was trying to reproduce what I could do in JavaScript. See above... The Lounge[^]
|
|
|
|
|
|
OriginalGriff wrote: That's probably even less efficient than my Linq code!
But it works!!
|
|
|
|
|
yep, I was once asked a question of if you can only have two variables how do you switch their values. I was in a peevy mood(due to idiot I was interviewing with) and didn't really think before I answered. But I essentially said never happens in real life and why the heck do you want too and dude it really isn't possible. Once I thought about it for a second(a week later) I understood it was just a theoretical question. But hell.
a = 15
b = 5
a= a+b
b = a-b
a = a-b
But would that ever happen in a real life work environment?
To err is human to really mess up you need a computer
|
|
|
|
|
rnbergren wrote: But would that ever happen in a real life work environment?
That's the point. If this was systems programming or device programming I could see that. But for your typical LOB app...
Jeremy Falcon
|
|
|
|
|
There is an old trick from days when memory sizes were counted in bytes. (No I did not figure it out and had to be taught it.)
Use three exclusive or operations. This will avoid the overflow issue of using add and subtract.
For example:
a = 15
b = 5
a = a^b
b = b^a
a = a^b
|
|
|
|
|
I've always liked this trick since I first saw it in an assembler manual for PLAN (there must be other OPers who remember PLAN). The only problem with it is that it only works with integers.
|
|
|
|
|
I remember that from my C days. If someone asked me that in JavaScript though I'd have to take a step back end think about.... a lot. I miss a good XOR at times.
Jeremy Falcon
|
|
|
|
|
|
Jeremy Falcon wrote: Does anyone else think coding interviews are fundamentally broken? Perhaps, but of the ones I've partaken in, it may also be me. With three decades under my belt, there's not much I can't do, yet I feel totally inept when asked "How would you solve" questions.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
I think after years you become so focused on real problems and real solutions, that such out-of-the-world questions are irritating you so much you not even feel to do a real effort...
You take it as an insult to your developer intelligence
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
I must agree with this sentiment.
Jeremy Falcon
|
|
|
|
|
Here's the problem:
Most people involved in hiring, (HR and managers), wouldn't recognise talent if the candidate had it tattooed across their forehead. So they resort to 'mechanical' methods of selection. If anywhere needs the help of AI, it's recruitment - because the real stuff isn't in abundance!
|
|
|
|