• + 10 comments

    Same solution in Javascript

        var arr = [];
        var max = 0;
        // init each element of arr to 0
        for (let l = 0; l < n; l++) {
            arr[l] = 0;
        }
        // for each sum operation in queries
        for (let i = 0; i < queries.length; i++) {
           // update arr with number to add at index=queries[i][0]  and number to remove at index=queries[i][0]+1 => this will allow us to build each element of the final array by summing all elements before it. The aim of this trick is to lower time complexity
            arr[queries[i][0]-1] += queries[i][2];
            if (queries[i][1] < arr.length) {
                arr[queries[i][1]] -= queries[i][2];
            }
        }
        for (let j = 1; j < n; j++) {
            arr[j] += arr[j-1];
        }
        for (let k = 0; k < arr.length; k++) {
            max = Math.max(max, arr[k]);
        }
        //max = Math.max(...arr); // not working for big arrays
        return max;
    
    • + 1 comment

      Hey, I did the code in Java8 and my code is getting failed for input type - where only single value is present in a row of array. meaning only left index value is provided and right and k value is missing from array. So can you help me how to solve this issue?

      • + 0 comments

        you could post your code,and we can check it out

    • + 3 comments

      simpler in es6:

      function arrayManipulation(n, queries) { let arr = new Array(2*n).fill(0); let max = 0;

      queries.forEach((item) => {
          arr[item[0]] += item[2];
          arr[item[1] + 1] -= item[2];
      });
      
      arr.reduce((prev, curr, idx) => {
          const sum = prev + curr;
          if (sum > max) {
              max = sum;
          }
      
          return sum;
      })
      
      return max;
      

      }

      • + 1 comment

        I did something pretty similar, just with a little bit more readable forEach:

        const arr = new Array(n).fill(0);
        let result = 0;
        
        queries.forEach(([a, b, k]) => {
            arr[a - 1] += k;
            if (b < arr.length) {
                arr[b] -= k;
            }
        });
        
        arr.reduce((a, b) => {
            const acc = a + b;
            result = Math.max(result, acc);
            return acc;
        }, 0);
        
        return result;
        
        • + 3 comments

          This produces wrong answer in some of the tests.

          • + 2 comments

            Hi,

            try this. Here is the video tutorial for my solution O(n+m) complexity.

            https://www.youtube.com/watch?v=hDhf04AJIRs&list=PLSIpQf0NbcCltzNFrOJkQ4J4AAjW3TSmA

            Would really appreciate your feedback like and comment etc. on my video.

            • + 1 comment

              It is a good video. I understood the algorithm clearly.

              • + 1 comment

                thanks @chandraprabha90.

                but it would be great if you can please provide your comments, like, dislike on my video how i did it..It motivates me to create better content for my audience.

                • + 2 comments

                  Could you add subtitles? I tried watching it but couldn't quite understand your accent through the audio

                  • + 0 comments

                    Hi Grozny,

                    I appologize for my bad sound quality but i am trying to improve it. but it will be very difficult to add subtitle for this video because its around half an hour which explains all the concepts in deep.

                    Making this long video took lot of effort and time now adding a subtitle will be very tedious without any support.

                    Will suggest you to try automatic transcribe feature from youtube to translate it.

                    Anyway thanks for watching.

                  • + 0 comments

                    Hi Grozny,

                    I have added subtitle for this tutorial and I hope it will you to understand logic with more clarity.

            • + 1 comment
              [deleted]
              • + 0 comments

                Nice approach you got there!

          • + 0 comments

            I had the same issue. my mistake was decrementing lower and upper. you don't decrement upper, the difference array needs to show it went down AFTER then last index, not within.

      • + 0 comments

        Thought to myself ....no js solutions here? then I find 3 of them, Js, ES6, readable wow.

    • + 0 comments

      Your last for loop isn't needed. You can move Math.max to the previous for loop.

    • + 0 comments

      Added some ES6 syntax suger...

      const arrayManipulation2 = (n, queries) => {
        const arr = new Array(n).fill(0);
        let max = 0;
        for (let i = queries.length - 1; i >= 0; i--) {
          const [a, b, k] = queries[i];
          arr[a - 1] += k;
          if (b < arr.length) {
            arr[b] -= k;
          }
        }
        for (let j = 1; j < n; j++) {
          arr[j] += arr[j - 1];
        }
        for (let k = arr.length - 1; k >= 0; k--) {
          max = Math.max(max, arr[k]);
        }
        return max;
      };
      
    • + 0 comments

      Got stuck because of this

      max = Math.max(...arr); // not working for big arrays

      Thanks man!

    • + 0 comments

      You could simplify your code a smidge, and save a little processing power, by removing your final for loop, and putting in an if check in the second to last loop, like this:

      for (let j = 1; j < n; j++) {
      	arr[j] += arr[j-1];
      	
      	if (arr[i] > biggest) {
      		biggest = arr[i];
      	}
      }
      
    • + 1 comment
      [deleted]
      • + 0 comments

        Perfect! Could you please explain me the thought process behind the solution?

    • + 0 comments

      My js solution ran out of time for a few test cases

      function arrayManipulation(n, queries) { let a = new Array(n).fill(0); for(let j = 0; j < queries.length; j++) { let temp = queries[j] let k = temp[0]; while(k <= temp[1]) { a[k-1] += temp[2]; k++; }

      } return Math.max.apply(Math, a); }