You are viewing a single comment's thread. Return to all comments →
I noticed that Your answer goes through way too many iterations and doesn't take large enough steps, there can be no correct answer between a.Max() and 2a.Max(), therefore skipping those is a good idea.
Looping through by generating an amount of integers also isnt really necessary, just start from lowest possible correct answer ( a.Max() ) and make sure youre not over the largest possible ( b.Min() ) correct answer.
Works like a charm :).
Here is the resulting code with comments.
public static int getTotalX(List<int> a, List<int> b)
/*Starting from 0 found, storing largest value in A and smallest value in b. Setting starting point to largest value in A.*/
int foundCount = 0, maxA = a.Max(), minB = b.Min(), current = maxA;
while (current <= minB)
/*If the current value is divisible by all members of both arrays, then it's the one we want.*/
if (a.All(e => current % e == 0 || e % current == 0) && b.All(e => current % e == 0 || e % current == 0))
/*Iterate the value by largest member of divisors, no reason to take smaller steps.*/
" C# " for everyone CTRL+F-ing.
//Stored a.Max() and b.Min() as dsgarg71 suggested below :).
Very nice optimization! I really was not realized it. Thanks. :)
Thanks :). dsarg71 found another neat optimization. I've added that as well.
Wow It did the magic. Thanks
Why not to store a.Max/b.Min and other such stuff once got so that their compute does not repeat.
You're right, the computation does indeed get repeated,
I've changed the code accordingly. Good eye!
How in the world did you know to use this to find the answer?
I would really like to know.
What did you study to know this? Nothing I have ever covered in C# would tell me to use something like this to come up with this answer, hell I couldn't even understand the frickin problem. I just don't get how peeps look at something and boom know what to apply and where...really discourages me.
its all about mathematics people will learn eventually
Dont get discouraged :).
I think studying something specifically, to solve these types of problems, would be a waste of time. These types of problems are really about building something from LEGO-s. The LEGO-s being things you know about any programming language, or problem solving overall. You just put pieces together and see what fits. If you wanted to improve yourself, just get more LEGO-s, learn more about the language, its possibilities etc...
With these types of problems, theres always a distict correct answer, which gives you a solid metric, as to how right you are. If youre wrong, you get the wrong result, so its really easy to get feedback and improve.
If understanding the problem overall was the difficult part, then maybe try some simpler problems first, this specific problem can be solved in about infinite ways, some faster/optimal, some not.
Keep trying ;), you'll get it eventually.