Advertisement · 728 × 90
#
Hashtag
#twopointers
Advertisement · 728 × 90
Preview
Two pointers: a practical technique for code challenges Master the Two Pointers technique with practical Python and JavaScript examples designed to help you ace technical interviews.

Tech interviews are ruthless right now.
That’s why we’re focused on patterns that actually show up—so Vets Who Code devs walk in prepared.

Today’s drop: Two Pointers → a simple, powerful trick to level up your array and string game.

#vetswhocode #codechallenges #twopointers

🧠

0 0 0 0
Preview
[📝LeetCode #88] Merge Sorted Array ## 🎀 The Problem You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively. Merge nums1 and nums2 into a single array sorted in non-decreasing order. ### _Example:_ Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6] ## 👩‍💻 My Answer class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { if (m == 0) { System.arraycopy(nums2, 0, nums1, 0, n); return; } else if (n == 0) return; int[] nums3 = nums1.clone(); // copy of nums 1 int temp; int i = 0; int j = 0; int k = 0; while (i < m && j < n) { if (nums3[i] < nums2[j]) { // if nums2 is larger than nums3 nums1[k] = nums3[i]; // add nums3 letter into nums1 k++; i++; } else if (nums3[i] >= nums2[j]) { nums1[k] = nums2[j]; // add nums2 into nums1 k++; j++; } } while (i < m) { // if i is still smaller than m nums1[k] = nums3[i]; // add nums3 into nums1 k++; i++; } while (j < n) { // if j is still smaller than n nums1[k] = nums2[j]; // add nums2 into nums1 k++; j++; } } } ### Pro & Con * ✅ Runtime & Memory * ✖️ Too long * ✖️ Bit complicated (Hard to read) ## 💋 Ideal Answer ### Approach - "Two Pointer" I read the solution post on LeetCode and found the "Two Pointer" approach (I feel it is more like a "Three Pointer" approach). We can start by initializing two pointers, i and j, to m-1 and n-1, respectively. We will also have another pointer k initialized to m+n-1, which will be used to keep track of the position in nums1 where we will be placing the larger element. Then we can start iterating from the end of the arrays i and j, and compare the elements at these positions. We will place the larger element in nums1 at position k, and decrement the corresponding pointer i or j accordingly. We will continue doing this until we have iterated through all the elements in nums2. If there are still elements left in nums1, we don't need to do anything because they are already in their correct place. I also watched the YouTube video to understand better. LeetCode University's Merge Sorted Array Explanation ### New Code class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = n + m - 1; int j = m - 1; int k = n - 1; while (k >= 0) { if (j < 0 || nums1[j] < nums2[k]) { nums1[i] = nums2[k]; k--; i--; } else if (nums1[j] >= nums2[k]) { nums1[i] = nums1[j]; j--; i--; } } } } ## 💡 What I Learned * How to copy int[]: `int[] nums3 = nums1.clone(); // copy of nums 1` * How to minimize the code lines: `nums1[i--] = nums2[k--];` instead of nums1[i] = nums2[k]; k--; i--;
0 0 0 0
Preview
[📝LeetCode #88] Merge Sorted Array ## 🎀 The Problem You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively. Merge nums1 and nums2 into a single array sorted in non-decreasing order. ### _Example:_ Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6] ## 👩‍💻 My Answer class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { if (m == 0) { System.arraycopy(nums2, 0, nums1, 0, n); return; } else if (n == 0) return; int[] nums3 = nums1.clone(); // copy of nums 1 int temp; int i = 0; int j = 0; int k = 0; while (i < m && j < n) { if (nums3[i] < nums2[j]) { // if nums2 is larger than nums3 nums1[k] = nums3[i]; // add nums3 letter into nums1 k++; i++; } else if (nums3[i] >= nums2[j]) { nums1[k] = nums2[j]; // add nums2 into nums1 k++; j++; } } while (i < m) { // if i is still smaller than m nums1[k] = nums3[i]; // add nums3 into nums1 k++; i++; } while (j < n) { // if j is still smaller than n nums1[k] = nums2[j]; // add nums2 into nums1 k++; j++; } } } ### Pro & Con * ✅ Runtime & Memory * ✖️ Too long * ✖️ Bit complicated (Hard to read) ## 💋 Ideal Answer ### Approach - "Two Pointer" I read the solution post on LeetCode and found the "Two Pointer" approach (I feel it is more like a "Three Pointer" approach). We can start by initializing two pointers, i and j, to m-1 and n-1, respectively. We will also have another pointer k initialized to m+n-1, which will be used to keep track of the position in nums1 where we will be placing the larger element. Then we can start iterating from the end of the arrays i and j, and compare the elements at these positions. We will place the larger element in nums1 at position k, and decrement the corresponding pointer i or j accordingly. We will continue doing this until we have iterated through all the elements in nums2. If there are still elements left in nums1, we don't need to do anything because they are already in their correct place. I also watched the YouTube video to understand better. LeetCode University's Merge Sorted Array Explanation ### New Code class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = n + m - 1; int j = m - 1; int k = n - 1; while (k >= 0) { if (j < 0 || nums1[j] < nums2[k]) { nums1[i] = nums2[k]; k--; i--; } else if (nums1[j] >= nums2[k]) { nums1[i] = nums1[j]; j--; i--; } } } } ## 💡 What I Learned * How to copy int[]: `int[] nums3 = nums1.clone(); // copy of nums 1` * How to minimize the code lines: `nums1[i--] = nums2[k--];` instead of nums1[i] = nums2[k]; k--; i--;
0 0 0 0
Video

Sort vs. Rearrangement

At first, it seemed like job for sorting "split and merge" approach. Is it easy to understand? Sure. BUT it uses a lot of memory.

But there is a better way: use two pointers.

Not O(n²), but O(n).

#leetcode
#sorting
#complexity
#twopointers

0 0 0 0