2.4 Bitonic / Rotated Array
Demo · approach · কোড — আগে নিজে চেষ্টা, আটকালে খুলুন
Demo: Search in Rotated Sorted Array — LC 33 (Medium — Amazon/Meta/Google High)
Statement (Demo): unique elements বিশিষ্ট একটি sorted array nums কোনো একটি pivot index-এ rotate করা হয়েছে (যেমন: [0,1,2,4,5,6,7] হয়ে গেছে [4,5,6,7,0,1,2])। এই rotated array-তে একটি target মান খুঁজুন। যদি target থাকে তবে তার index return করুন, অন্যথায় -1 return করুন। runtime complexity অবশ্যই O(log n) হতে হবে। উদাহরণ: nums = [4,5,6,7,0,1,2], target = 0 → 4 | ⚡ n ≤ 5000, -10⁴ ≤ nums[i], target ≤ 10⁴
Approach: প্রতি ধাপে দেখুন কোন অর্ধেক sorted (nums[lo] <= nums[mid] হলে বাম)। target সেই sorted অর্ধেকের range-এ পড়লে সেদিকে যান, নাহলে অন্য দিকে।
function search(nums, target) {
let lo = 0,
hi = nums.length - 1;
while (lo <= hi) {
const mid = (lo + hi) >> 1;
if (nums[mid] === target) return mid;
if (nums[lo] <= nums[mid]) {
// বাম অর্ধেক sorted
if (nums[lo] <= target && target < nums[mid]) hi = mid - 1;
else lo = mid + 1;
} else {
// ডান অর্ধেক sorted
if (nums[mid] < target && target <= nums[hi]) lo = mid + 1;
else hi = mid - 1;
}
}
return -1;
}
Complexity: Time O(log n), Space O(1)
প্রবলেম
- Find Minimum in Rotated Sorted Arrayplan · দিন ০১৫LC 153
Statement: unique elements বিশিষ্ট sorted array nums (সাইজ n) ১ থেকে n বার rotate করা হয়েছে। এই rotated array থেকে ন্যূনতম (minimum) উপাদানটি খুঁজে বের করুন। O(log n) টাইম লিমিটে করতে হবে।
উদাহরণ: nums = [3,4,5,1,2] → 1 | ⚡ n ≤ 5000, -5000 ≤ nums[i] ≤ 5000নোট · ফাঁকা
- Find Peak Elementplan · দিন ০৩৮LC 162(ঢালের দিক দেখে অর্ধেক বাদ)
Statement: একটি 0-indexed integer array nums দেওয়া আছে। একটি peak element খুঁজে তার index রিটার্ন করুন (peak element হলো যা তার আশেপাশের প্রতিবেশীদের চেয়ে কঠোরভাবে বড়, অর্থাৎ nums[i] > nums[i-1] এবং nums[i] > nums[i+1])। O(log n) টাইমে করতে হবে।
উদাহরণ: nums = [1,2,3,1] → 2 | ⚡ n ≤ 1000, -2³¹ ≤ nums[i] ≤ 2³¹ - 1নোট · ফাঁকা