1.1 Two Pointers
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন
Demo: Trapping Rain Water — LC 42 (Hard — Amazon/Google/Meta High)
Statement (Demo): height নামের একটা integer array দেওয়া যেখানে প্রতিটা মান একটা উল্লম্ব বারের উচ্চতা। বারগুলোর মাঝে বৃষ্টির পানি কতটুকু আটকে থাকবে তার মোট পরিমাণ বের করুন।
উদাহরণ: [0,1,0,2,1,0,1,3,2,1,2,1] → 6 | ⚡ n ≤ 2×10⁴, 0 ≤ height[i] ≤ 10⁵
Approach: প্রতিটা ঘরে পানি জমে min(leftMax, rightMax) - height[i]। দুই প্রান্ত থেকে pointer চালান — যেদিকের height ছোট সেদিকটা আগান, কারণ ছোট দিকের max-ই bottleneck, অন্য পাশে যত বড়ই থাকুক পানির উচ্চতা এই দিকেই আটকে।
function trap(height) {
let l = 0,
r = height.length - 1;
let leftMax = 0,
rightMax = 0,
water = 0;
while (l < r) {
if (height[l] < height[r]) {
leftMax = Math.max(leftMax, height[l]);
water += leftMax - height[l];
l++;
} else {
rightMax = Math.max(rightMax, height[r]);
water += rightMax - height[r];
r--;
}
}
return water;
}
Complexity: Time O(n), Space O(1) (monotonic stack দিয়েও হয় — দেখুন 4.1)
প্রবলেম
Statement: integer array
numsদেওয়া — তিনটা আলাদা index-এর সংখ্যা খুঁজুন যাদের যোগফল0। Duplicate triplet ছাড়া সব unique triplet return করুন।
উদাহরণ:[-1,0,1,2,-1,-4]→[[-1,-1,2],[-1,0,1]]| ⚡n ≤ 3000নোট · ফাঁকা
- Container With Most Waterplan · দিন ০০৮LC 11
Statement:
nটা উল্লম্ব রেখা আছে,i-তম রেখার উচ্চতাheight[i]। দুটো রেখা বেছে নিন যাতে তারা x-axis সহ সবচেয়ে বেশি পানি ধরতে পারে।
উদাহরণ:[1,8,6,2,5,4,8,3,7]→49| ⚡n ≤ 10⁵নোট · ফাঁকা
- Two Sum II (Sorted Array)plan · দিন ০০৪LC 167
Statement: 1-indexed sorted array
numbersদেওয়া — দুটো সংখ্যার index বের করুন যাদের যোগফলtarget। একই element দুবার ব্যবহার করা যাবে না, O(1) extra space।
উদাহরণ:numbers=[2,7,11,15], target=9→[1,2]| ⚡n ≤ 3×10⁴নোট · ফাঁকা
- Valid Palindromeplan · দিন ০০৩LC 125
Statement: string
sদেওয়া — শুধু alphanumeric character রেখে lowercase-এ নামিয়ে palindrome কিনা বলুন।
উদাহরণ:"A man, a plan, a canal: Panama"→true| ⚡len ≤ 2×10⁵নোট · ফাঁকা
- Remove Duplicates from Sorted ArrayLC 26
Statement: sorted integer array
numsদেওয়া — in-place unique element রাখুন (extra array নয়) এবং unique element-এর সংখ্যাkreturn করুন।
উদাহরণ:[1,1,2]→k=2,nums=[1,2,_]| ⚡n ≤ 3×10⁴নোট · ফাঁকা
- Sort ColorsLC 75(তিন pointer / Dutch flag)
Statement:
0,1,2সম্বলিত arraynumsদেওয়া — in-place sort করুন যাতে সব0আগে, তারপর1, তারপর2। Built-in sort ব্যবহার করা যাবে না।
উদাহরণ:[2,0,2,1,1,0]→[0,0,1,1,2,2]| ⚡n ≤ 300নোট · ফাঁকা
- Merge Sorted ArrayLC 88(পেছন থেকে merge)
Statement: দুটো sorted array
nums1(sizem+n) ওnums2(sizen) দেওয়া —nums1-এ in-place merge করুন।
উদাহরণ:nums1=[1,2,3,0,0,0], m=3, nums2=[2,5,6], n=3→[1,2,2,3,5,6]| ⚡m,n ≤ 200নোট · ফাঁকা
- Reverse StringLC 344
Statement: character array
sদেওয়া — in-place reverse করুন। O(1) extra memory ব্যবহার করতে হবে।
উদাহরণ:['h','e','l','l','o']→['o','l','l','e','h']| ⚡n ≤ 10⁵নোট · ফাঁকা