ধরুন আমাদের কাছে n-1 গাণিতিক ক্রম পদ ধরে nums নামে একটি অ্যারে আছে। সংখ্যার প্রথম বা শেষ উপাদান ছাড়া একটি উপাদান আগে মুছে ফেলা হয়েছিল। আমাদের সরানো নম্বর খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[5, 7, 11, 13], তাহলে আউটপুট হবে 9 কারণ, আইটেমগুলি 2i+5 সূত্র অনুসরণ করছে, তাই i =2 এর জন্য এটি হবে 2*2 + 5 =9 যা অনুপস্থিত।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
যদি সংখ্যার আকার 2 এর সমান হয়, তাহলে
-
(সংখ্যায় উপস্থিত সমস্ত উপাদানের যোগফল)/2
এর রিটার্ন ফ্লোর
-
-
যদি nums[0] nums[1] এর মত হয়, তাহলে/p>
-
রিটার্ন সংখ্যা[0]
-
-
নিম্ন :=সংখ্যা[0]
-
উপরের :=সংখ্যার শেষ উপাদান
-
ব্যবধান :=তল (উপরের - নীচের) / সংখ্যার আকার
-
পয়েন্টার :=সংখ্যার আকারের মেঝে / 2
-
বাম :=0
-
ডান:=সংখ্যার আকার - 1
-
যখন বাম ডানের মতো নয়, তখন করুন
-
যদি nums[pointer] nums[0] + interval * pointer এর মত না হয়, তাহলে
-
যদি nums[pointer - 1] nums[0] + interval *(pointer - 1) এর মত হয়, তাহলে
-
রিটার্ন সংখ্যা[0] + ইন্টারভাল * পয়েন্টার
-
-
অন্যথায়,
-
ডান:=পয়েন্টার
-
পয়েন্টার :=ফ্লোর অফ(বাম + ডান) / 2
-
-
-
অন্যথায়,
-
যদি ডান - বাম 1 এর মত হয়, তাহলে
-
পয়েন্টার :=ডান
-
-
অন্যথায়,
-
বাম :=পয়েন্টার
-
পয়েন্টার :=ফ্লোর অফ (বাম + ডান) / 2
-
-
-
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
def solve(nums):
if len(nums) == 2:
return sum(nums) // 2
if nums[0] == nums[1]:
return nums[0]
lower = nums[0]
upper = nums[-1]
interval = (upper - lower) // len(nums)
pointer = len(nums) // 2
left = 0
right = len(nums) - 1
while left != right:
if nums[pointer] != nums[0] + interval * pointer:
if nums[pointer - 1] == nums[0] + interval * (pointer -1):
return nums[0] + interval * pointer
else:
right = pointer
pointer = (left + right) // 2
else:
if right - left == 1:
pointer = right
else:
left = pointer
pointer = (left + right) // 2
nums = [5, 7, 11, 13]
print(solve(nums)) ইনপুট
[5, 7, 11, 13]
আউটপুট
9