Content-Length: 17152 | pFad | http://github.com/algorithm-visualizer/algorithms/pull/37.patch
thub.com
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/).
+
+
+
+```
+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)
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/algorithm-visualizer/algorithms/pull/37.patch
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy