From 08fd5cb1a4ca10d2e99836d143ed20e98ee19806 Mon Sep 17 00:00:00 2001 From: Alex Scrobot Date: Sun, 9 Apr 2023 15:44:09 +0200 Subject: [PATCH 1/2] feat: added "Two Pointers" approach visualization --- Uncategorized/Two Pointers/README.md | 27 ++++++++++ Uncategorized/Two Pointers/code.js | 50 ++++++++++++++++++ .../Two Pointers/img/question_11.jpg | Bin 0 -> 18362 bytes 3 files changed, 77 insertions(+) create mode 100644 Uncategorized/Two Pointers/README.md create mode 100644 Uncategorized/Two Pointers/code.js create mode 100644 Uncategorized/Two Pointers/img/question_11.jpg diff --git a/Uncategorized/Two Pointers/README.md b/Uncategorized/Two Pointers/README.md new file mode 100644 index 00000000..9a21ec38 --- /dev/null +++ b/Uncategorized/Two Pointers/README.md @@ -0,0 +1,27 @@ +# Two Pointers + +Two pointers algorithm is a very useful technique in solving many problems, especially those that require scanning through arrays or lists. + +One practical example of using the two pointers algorithm is in finding pairs of numbers in an array that add up to a given target value. + +But, I prefer to provide example from the [leetcode](https://leetcode.com/problems/container-with-most-water/). + +![question_11.jpg](img%2Fquestion_11.jpg) + +``` +You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). + +Find two lines that together with the x-axis form a container, such that the container contains the most water. + +Return the maximum amount of water a container can store. + +Notice that you may not slant the container. + +Input: height = [1,8,6,2,5,4,8,3,7] +Output: 49 +Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49. +``` + +## Complexity +* **Time**: O(n) +* **Space**: O(1) \ No newline at end of file diff --git a/Uncategorized/Two Pointers/code.js b/Uncategorized/Two Pointers/code.js new file mode 100644 index 00000000..de32a7b3 --- /dev/null +++ b/Uncategorized/Two Pointers/code.js @@ -0,0 +1,50 @@ +const { Tracer, Array1DTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer'); + +const tracer = new Array1DTracer('Input array'); +const areaTracer = new Array1DTracer('Max area calculation'); +const logger = new LogTracer(); + +Layout.setRoot(new VerticalLayout([tracer, areaTracer, logger])); + +function maxArea(height) { + tracer.set(height) + + let left = 0; + let right = height.length - 1; + let maxArea = 0; + + while (left < right) { + tracer.select(left); + tracer.select(right); + Tracer.delay(); + logger.println(`Checking area between ${left} and ${right}`); + + const h = Math.min(height[left], height[right]); + areaTracer.patch(0, h) + Tracer.delay(); + + const w = right - left; + areaTracer.patch(1, h) + Tracer.delay(); + + const area = h * w; + maxArea = Math.max(maxArea, area); + + areaTracer.patch(2, maxArea) + Tracer.delay(); + + tracer.deselect(left, right) + Tracer.delay(); + + if (height[left] < height[right]) { + left++; + } else { + right--; + } + } + + return maxArea; +} + +const height1 = [1,8,6,2,5,4,8,3,7]; +console.log(maxArea(height1)); // Output: 49 \ No newline at end of file diff --git a/Uncategorized/Two Pointers/img/question_11.jpg b/Uncategorized/Two Pointers/img/question_11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7661efe42a9c4659500f272b4b6935f6fa031836 GIT binary patch literal 18362 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 V8G7N%`U{oAwQiU*77lvg{{a>dShfHF literal 0 HcmV?d00001 From 4d23ef06ecd91b6a67cddf0ed9cd001d497d29d7 Mon Sep 17 00:00:00 2001 From: Alex Scrobot Date: Mon, 10 Apr 2023 10:25:53 +0200 Subject: [PATCH 2/2] Update README.md --- Uncategorized/Two Pointers/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Uncategorized/Two Pointers/README.md b/Uncategorized/Two Pointers/README.md index 9a21ec38..1d8a6ccd 100644 --- a/Uncategorized/Two Pointers/README.md +++ b/Uncategorized/Two Pointers/README.md @@ -24,4 +24,8 @@ Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3, ## Complexity * **Time**: O(n) -* **Space**: O(1) \ No newline at end of file +* **Space**: O(1) + +## References: + +* [DSA: Two-pointers algorithm. Review with the step-by-step guide](https://medium.com/@alexeyskrobot/dsa-two-pointers-algorithm-review-with-the-step-by-step-guide-e8368e11a144) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy