| 1 | class TwoPointers { |
| 2 | /** |
| 3 | * Move Zeroes using Two Pointers |
| 4 | * @param {number[]} nums - Input array |
| 5 | */ |
| 6 | moveZeroesTwoPointers(nums) { |
| 7 | let left = 0; // Pointer for placing non-zero elements |
| 8 | |
| 9 | // Iterate with right pointer |
| 10 | for (let right = 0; right < nums.length; right++) { |
| 11 | if (nums[right] !== 0) { |
| 12 | // Swap elements if right pointer finds a non-zero |
| 13 | [nums[left], nums[right]] = [nums[right], nums[left]]; |
| 14 | left++; // Move left pointer forward |
| 15 | } |
| 16 | } |
| 17 | } |
| 18 | |
| 19 | /** |
| 20 | * Brute Force approach for Container with Most Water |
| 21 | * @param {number[]} height - Array of heights |
| 22 | * @return {number} - Maximum water that can be contained |
| 23 | */ |
| 24 | maxAreaBruteForce(height) { |
| 25 | let maxArea = 0; |
| 26 | let n = height.length; |
| 27 | |
| 28 | // Check all pairs (i, j) |
| 29 | for (let i = 0; i < n; i++) { |
| 30 | for (let j = i + 1; j < n; j++) { |
| 31 | // Compute the minimum height and width |
| 32 | let minHeight = Math.min(height[i], height[j]); |
| 33 | let width = j - i; |
| 34 | let area = minHeight * width; // Compute water contained |
| 35 | |
| 36 | maxArea = Math.max(maxArea, area); // Update max water |
| 37 | } |
| 38 | } |
| 39 | return maxArea; |
| 40 | } |
| 41 | |
| 42 | /** |
| 43 | * Two Pointers approach for Container with Most Water |
| 44 | * @param {number[]} height - Array of heights |
| 45 | * @return {number} - Maximum water that can be contained |
| 46 | */ |
| 47 | maxAreaTwoPointers(height) { |
| 48 | let left = 0, right = height.length - 1; |
| 49 | let maxArea = 0; |
| 50 | |
| 51 | // Move pointers toward each other |
| 52 | while (left < right) { |
| 53 | let width = right - left; // Distance between lines |
| 54 | let minHeight = Math.min(height[left], height[right]); // Compute height |
| 55 | let area = minHeight * width; // Compute water contained |
| 56 | |
| 57 | maxArea = Math.max(maxArea, area); // Update max water |
| 58 | |
| 59 | // Move the pointer pointing to the shorter height |
| 60 | if (height[left] < height[right]) { |
nothing calls this directly
no outgoing calls
no test coverage detected