Codility “PermMissingElem” Solution












3












$begingroup$


This is my solution to the PermMissingElem problem, I wonder what can be improved? Expected worst case time complexity is O(N), but the performance test shows that it's O(N) or O(N * log(N)), which I suppose there's some solution out there that can truly achieve pure O(N)?



function solution(A) {
const size = A.length;
let sum = 0;

for (i=0;i<size;i++){
sum += A[i];
}

return (((size+ 1)*(size + 2))/2) - sum
}


The original problem is quoted as follows:




A zero-indexed array A consisting of N different integers is given.
The array contains integers in the range [1..(N + 1)], which means
that exactly one element is missing.



Your goal is to find that missing element.



Write a function:



int solution(int A, int N); that, given a zero-indexed array A,
returns the value of the missing element.



For example, given array A such that:



A[0] = 2 A1 = 3 A[2] = 1 A[3] = 5 the function should return
4, as it is the missing element.



Assume that:



N is an integer within the range [0..100,000]; the elements of A are
all distinct; each element of array A is an integer within the range
[1..(N + 1)].



Complexity:



expected worst-case time complexity is O(N); expected worst-case space
complexity is O(1), beyond input storage (not counting the storage
required for input arguments). Elements of input arrays can be
modified.











share|improve this question









$endgroup$








  • 1




    $begingroup$
    Have you looked at this related question?
    $endgroup$
    – yuri
    Jun 7 '17 at 20:26










  • $begingroup$
    Can you share a performance test which reveals $O(Nlog{N})$ complexity?
    $endgroup$
    – vnp
    Jun 8 '17 at 1:52












  • $begingroup$
    Just a note for people who may wonder at how the solution was arrived at. When you read the corresponding material at codility.com/media/train/1-TimeComplexity.pdf, accessed via app.codility.com/programmers/lessons/3-time_complexity, it explains the optimal solution for finding the sum of integers 1..N. This solution can be applied to this problem, since we can find the sum of integers 1..N+1, and then subtract the sum of the integers in the array, in order to find the missing integer in the array.
    $endgroup$
    – James Ray
    46 mins ago
















3












$begingroup$


This is my solution to the PermMissingElem problem, I wonder what can be improved? Expected worst case time complexity is O(N), but the performance test shows that it's O(N) or O(N * log(N)), which I suppose there's some solution out there that can truly achieve pure O(N)?



function solution(A) {
const size = A.length;
let sum = 0;

for (i=0;i<size;i++){
sum += A[i];
}

return (((size+ 1)*(size + 2))/2) - sum
}


The original problem is quoted as follows:




A zero-indexed array A consisting of N different integers is given.
The array contains integers in the range [1..(N + 1)], which means
that exactly one element is missing.



Your goal is to find that missing element.



Write a function:



int solution(int A, int N); that, given a zero-indexed array A,
returns the value of the missing element.



For example, given array A such that:



A[0] = 2 A1 = 3 A[2] = 1 A[3] = 5 the function should return
4, as it is the missing element.



Assume that:



N is an integer within the range [0..100,000]; the elements of A are
all distinct; each element of array A is an integer within the range
[1..(N + 1)].



Complexity:



expected worst-case time complexity is O(N); expected worst-case space
complexity is O(1), beyond input storage (not counting the storage
required for input arguments). Elements of input arrays can be
modified.











share|improve this question









$endgroup$








  • 1




    $begingroup$
    Have you looked at this related question?
    $endgroup$
    – yuri
    Jun 7 '17 at 20:26










  • $begingroup$
    Can you share a performance test which reveals $O(Nlog{N})$ complexity?
    $endgroup$
    – vnp
    Jun 8 '17 at 1:52












  • $begingroup$
    Just a note for people who may wonder at how the solution was arrived at. When you read the corresponding material at codility.com/media/train/1-TimeComplexity.pdf, accessed via app.codility.com/programmers/lessons/3-time_complexity, it explains the optimal solution for finding the sum of integers 1..N. This solution can be applied to this problem, since we can find the sum of integers 1..N+1, and then subtract the sum of the integers in the array, in order to find the missing integer in the array.
    $endgroup$
    – James Ray
    46 mins ago














3












3








3





$begingroup$


This is my solution to the PermMissingElem problem, I wonder what can be improved? Expected worst case time complexity is O(N), but the performance test shows that it's O(N) or O(N * log(N)), which I suppose there's some solution out there that can truly achieve pure O(N)?



function solution(A) {
const size = A.length;
let sum = 0;

for (i=0;i<size;i++){
sum += A[i];
}

return (((size+ 1)*(size + 2))/2) - sum
}


The original problem is quoted as follows:




A zero-indexed array A consisting of N different integers is given.
The array contains integers in the range [1..(N + 1)], which means
that exactly one element is missing.



Your goal is to find that missing element.



Write a function:



int solution(int A, int N); that, given a zero-indexed array A,
returns the value of the missing element.



For example, given array A such that:



A[0] = 2 A1 = 3 A[2] = 1 A[3] = 5 the function should return
4, as it is the missing element.



Assume that:



N is an integer within the range [0..100,000]; the elements of A are
all distinct; each element of array A is an integer within the range
[1..(N + 1)].



Complexity:



expected worst-case time complexity is O(N); expected worst-case space
complexity is O(1), beyond input storage (not counting the storage
required for input arguments). Elements of input arrays can be
modified.











share|improve this question









$endgroup$




This is my solution to the PermMissingElem problem, I wonder what can be improved? Expected worst case time complexity is O(N), but the performance test shows that it's O(N) or O(N * log(N)), which I suppose there's some solution out there that can truly achieve pure O(N)?



function solution(A) {
const size = A.length;
let sum = 0;

for (i=0;i<size;i++){
sum += A[i];
}

return (((size+ 1)*(size + 2))/2) - sum
}


The original problem is quoted as follows:




A zero-indexed array A consisting of N different integers is given.
The array contains integers in the range [1..(N + 1)], which means
that exactly one element is missing.



Your goal is to find that missing element.



Write a function:



int solution(int A, int N); that, given a zero-indexed array A,
returns the value of the missing element.



For example, given array A such that:



A[0] = 2 A1 = 3 A[2] = 1 A[3] = 5 the function should return
4, as it is the missing element.



Assume that:



N is an integer within the range [0..100,000]; the elements of A are
all distinct; each element of array A is an integer within the range
[1..(N + 1)].



Complexity:



expected worst-case time complexity is O(N); expected worst-case space
complexity is O(1), beyond input storage (not counting the storage
required for input arguments). Elements of input arrays can be
modified.








javascript programming-challenge bitwise






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jun 7 '17 at 19:25









kdenzkdenz

1888




1888








  • 1




    $begingroup$
    Have you looked at this related question?
    $endgroup$
    – yuri
    Jun 7 '17 at 20:26










  • $begingroup$
    Can you share a performance test which reveals $O(Nlog{N})$ complexity?
    $endgroup$
    – vnp
    Jun 8 '17 at 1:52












  • $begingroup$
    Just a note for people who may wonder at how the solution was arrived at. When you read the corresponding material at codility.com/media/train/1-TimeComplexity.pdf, accessed via app.codility.com/programmers/lessons/3-time_complexity, it explains the optimal solution for finding the sum of integers 1..N. This solution can be applied to this problem, since we can find the sum of integers 1..N+1, and then subtract the sum of the integers in the array, in order to find the missing integer in the array.
    $endgroup$
    – James Ray
    46 mins ago














  • 1




    $begingroup$
    Have you looked at this related question?
    $endgroup$
    – yuri
    Jun 7 '17 at 20:26










  • $begingroup$
    Can you share a performance test which reveals $O(Nlog{N})$ complexity?
    $endgroup$
    – vnp
    Jun 8 '17 at 1:52












  • $begingroup$
    Just a note for people who may wonder at how the solution was arrived at. When you read the corresponding material at codility.com/media/train/1-TimeComplexity.pdf, accessed via app.codility.com/programmers/lessons/3-time_complexity, it explains the optimal solution for finding the sum of integers 1..N. This solution can be applied to this problem, since we can find the sum of integers 1..N+1, and then subtract the sum of the integers in the array, in order to find the missing integer in the array.
    $endgroup$
    – James Ray
    46 mins ago








1




1




$begingroup$
Have you looked at this related question?
$endgroup$
– yuri
Jun 7 '17 at 20:26




$begingroup$
Have you looked at this related question?
$endgroup$
– yuri
Jun 7 '17 at 20:26












$begingroup$
Can you share a performance test which reveals $O(Nlog{N})$ complexity?
$endgroup$
– vnp
Jun 8 '17 at 1:52






$begingroup$
Can you share a performance test which reveals $O(Nlog{N})$ complexity?
$endgroup$
– vnp
Jun 8 '17 at 1:52














$begingroup$
Just a note for people who may wonder at how the solution was arrived at. When you read the corresponding material at codility.com/media/train/1-TimeComplexity.pdf, accessed via app.codility.com/programmers/lessons/3-time_complexity, it explains the optimal solution for finding the sum of integers 1..N. This solution can be applied to this problem, since we can find the sum of integers 1..N+1, and then subtract the sum of the integers in the array, in order to find the missing integer in the array.
$endgroup$
– James Ray
46 mins ago




$begingroup$
Just a note for people who may wonder at how the solution was arrived at. When you read the corresponding material at codility.com/media/train/1-TimeComplexity.pdf, accessed via app.codility.com/programmers/lessons/3-time_complexity, it explains the optimal solution for finding the sum of integers 1..N. This solution can be applied to this problem, since we can find the sum of integers 1..N+1, and then subtract the sum of the integers in the array, in order to find the missing integer in the array.
$endgroup$
– James Ray
46 mins ago










2 Answers
2






active

oldest

votes


















2












$begingroup$

With your JavaScript version, there is not much to optimize. So I am just going to provide some minor improvements:




  1. Within a function, it is better to declare your variables using the var keyword. You should apply this to the i inside for() loop

  2. The JavaScript interpreter is a single thread: this means, unfortunately, you can not perform real parallelism to sum different chunks of the array.

  3. You can choose better variables and function names.






share|improve this answer









$endgroup$





















    0












    $begingroup$

    A minor modification:



    function solution(A) {
    const size = A.length;
    let sum = 0;

    for (let int of A){
    sum += int;
    }

    return (((size + 1)*(size + 2))/2) - sum
    }


    Note that I've kept the function name because it is what the exercises/tests in Codility use.



    As noted in the lesson material, the input N is an integer within the range [0..100,000]; so $O(n)$ or $O(Nlog{N})$ are acceptable time complexities.
    The dominant operation in this function is sum += int; (repeated in the loop N times). Other than that, we have a constant number of other operations, not e.g. a nested loop where the input or another variable of the same order is halved in each iteration of the loop, which would be $O(Nlog{N})$ time complexity. So both of our solutions are $O(n)$ complexity.






    share|improve this answer








    New contributor




    James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






    $endgroup$













      Your Answer





      StackExchange.ifUsing("editor", function () {
      return StackExchange.using("mathjaxEditing", function () {
      StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
      StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
      });
      });
      }, "mathjax-editing");

      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "196"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f165195%2fcodility-permmissingelem-solution%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2












      $begingroup$

      With your JavaScript version, there is not much to optimize. So I am just going to provide some minor improvements:




      1. Within a function, it is better to declare your variables using the var keyword. You should apply this to the i inside for() loop

      2. The JavaScript interpreter is a single thread: this means, unfortunately, you can not perform real parallelism to sum different chunks of the array.

      3. You can choose better variables and function names.






      share|improve this answer









      $endgroup$


















        2












        $begingroup$

        With your JavaScript version, there is not much to optimize. So I am just going to provide some minor improvements:




        1. Within a function, it is better to declare your variables using the var keyword. You should apply this to the i inside for() loop

        2. The JavaScript interpreter is a single thread: this means, unfortunately, you can not perform real parallelism to sum different chunks of the array.

        3. You can choose better variables and function names.






        share|improve this answer









        $endgroup$
















          2












          2








          2





          $begingroup$

          With your JavaScript version, there is not much to optimize. So I am just going to provide some minor improvements:




          1. Within a function, it is better to declare your variables using the var keyword. You should apply this to the i inside for() loop

          2. The JavaScript interpreter is a single thread: this means, unfortunately, you can not perform real parallelism to sum different chunks of the array.

          3. You can choose better variables and function names.






          share|improve this answer









          $endgroup$



          With your JavaScript version, there is not much to optimize. So I am just going to provide some minor improvements:




          1. Within a function, it is better to declare your variables using the var keyword. You should apply this to the i inside for() loop

          2. The JavaScript interpreter is a single thread: this means, unfortunately, you can not perform real parallelism to sum different chunks of the array.

          3. You can choose better variables and function names.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Jun 8 '17 at 15:36









          Billal BegueradjBillal Begueradj

          1




          1

























              0












              $begingroup$

              A minor modification:



              function solution(A) {
              const size = A.length;
              let sum = 0;

              for (let int of A){
              sum += int;
              }

              return (((size + 1)*(size + 2))/2) - sum
              }


              Note that I've kept the function name because it is what the exercises/tests in Codility use.



              As noted in the lesson material, the input N is an integer within the range [0..100,000]; so $O(n)$ or $O(Nlog{N})$ are acceptable time complexities.
              The dominant operation in this function is sum += int; (repeated in the loop N times). Other than that, we have a constant number of other operations, not e.g. a nested loop where the input or another variable of the same order is halved in each iteration of the loop, which would be $O(Nlog{N})$ time complexity. So both of our solutions are $O(n)$ complexity.






              share|improve this answer








              New contributor




              James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.






              $endgroup$


















                0












                $begingroup$

                A minor modification:



                function solution(A) {
                const size = A.length;
                let sum = 0;

                for (let int of A){
                sum += int;
                }

                return (((size + 1)*(size + 2))/2) - sum
                }


                Note that I've kept the function name because it is what the exercises/tests in Codility use.



                As noted in the lesson material, the input N is an integer within the range [0..100,000]; so $O(n)$ or $O(Nlog{N})$ are acceptable time complexities.
                The dominant operation in this function is sum += int; (repeated in the loop N times). Other than that, we have a constant number of other operations, not e.g. a nested loop where the input or another variable of the same order is halved in each iteration of the loop, which would be $O(Nlog{N})$ time complexity. So both of our solutions are $O(n)$ complexity.






                share|improve this answer








                New contributor




                James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






                $endgroup$
















                  0












                  0








                  0





                  $begingroup$

                  A minor modification:



                  function solution(A) {
                  const size = A.length;
                  let sum = 0;

                  for (let int of A){
                  sum += int;
                  }

                  return (((size + 1)*(size + 2))/2) - sum
                  }


                  Note that I've kept the function name because it is what the exercises/tests in Codility use.



                  As noted in the lesson material, the input N is an integer within the range [0..100,000]; so $O(n)$ or $O(Nlog{N})$ are acceptable time complexities.
                  The dominant operation in this function is sum += int; (repeated in the loop N times). Other than that, we have a constant number of other operations, not e.g. a nested loop where the input or another variable of the same order is halved in each iteration of the loop, which would be $O(Nlog{N})$ time complexity. So both of our solutions are $O(n)$ complexity.






                  share|improve this answer








                  New contributor




                  James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.






                  $endgroup$



                  A minor modification:



                  function solution(A) {
                  const size = A.length;
                  let sum = 0;

                  for (let int of A){
                  sum += int;
                  }

                  return (((size + 1)*(size + 2))/2) - sum
                  }


                  Note that I've kept the function name because it is what the exercises/tests in Codility use.



                  As noted in the lesson material, the input N is an integer within the range [0..100,000]; so $O(n)$ or $O(Nlog{N})$ are acceptable time complexities.
                  The dominant operation in this function is sum += int; (repeated in the loop N times). Other than that, we have a constant number of other operations, not e.g. a nested loop where the input or another variable of the same order is halved in each iteration of the loop, which would be $O(Nlog{N})$ time complexity. So both of our solutions are $O(n)$ complexity.







                  share|improve this answer








                  New contributor




                  James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.









                  share|improve this answer



                  share|improve this answer






                  New contributor




                  James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.









                  answered 21 mins ago









                  James RayJames Ray

                  1012




                  1012




                  New contributor




                  James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.





                  New contributor





                  James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.






                  James Ray is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                  Check out our Code of Conduct.






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Code Review Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      Use MathJax to format equations. MathJax reference.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f165195%2fcodility-permmissingelem-solution%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      404 Error Contact Form 7 ajax form submitting

                      How to know if a Active Directory user can login interactively

                      TypeError: fit_transform() missing 1 required positional argument: 'X'