ধরি আমাদের একটি পজিটিভ ইন্টিজারের লিস্ট আছে সাইজ n এবং অন্য একটি পজিটিভ ইন্টিজার m। প্রতিটি ইটারেশনে আমরা কিছু এলিমেন্ট ১ করে কমাই এবং বাকি এলিমেন্টগুলো m করে বাড়াই। আমাদের বের করতে হবে কি অর্ধেক বা অধিক এলিমেন্ট কিছু ইটারেশনের পর শূন্য হয়ে যাবে। সম্ভব হলে True, না হলে False রিটার্ন করুন।
উদাহরণস্বরূপ, input_list = [10, 18, 35, 5, 12], m = 4 হলে আউটপুট হবে True।
সমাধানের ধাপসমূহ
- frequency_list := সাইজ m+1 একটি লিস্ট শূন্য দিয়ে ইনিশিয়ালাইজ
- প্রতিটি এলিমেন্টের জন্য frequency_list[element % (m+1)] বাড়ান
- যদি কোনো frequency_list[i] >= n/2 হয়, তবে true রিটার্ন করুন
- অন্যথায় false রিটার্ন করুন
উদাহরণ
def solve(input_list, m):
frequency_list = [0] * (m + 1)
i = 0
while i < len(input_list):
frequency_list[(input_list[i] % (m + 1))] += 1
i += 1
i = 0
while i <= m:
if frequency_list[i] >= (len(input_list) / 2):
break
i += 1
if i <= m:
return True
else:
return False
input_list = [10, 18, 35, 5, 12]
print(solve(input_list, 4))
ইনপুট
[10, 18, 35, 5, 12], 4
আউটপুট
True