কম্পিউটার

পাইথনে সংখ্যার তালিকা থেকে 0s থেকে 1s k বার পরিবর্তন করে সর্বনিম্ন সম্ভাব্য যোগফল খুঁজে বের করার প্রোগ্রাম?


ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যার নাম nums এবং আরেকটি মান k। আমাদের k বার অপারেশন করতে হবে:তালিকায় যে কোনো সংখ্যা নির্বাচন করুন। সেই সংখ্যার বাইনারি উপস্থাপনায়, একটি বিট নির্বাচন করুন যা 0 এবং এটিকে 1 করুন। অবশেষে, k অপারেশন করার পরে আমাদের সমস্ত সংখ্যার ন্যূনতম সম্ভাব্য যোগফল ফেরত দিতে হবে। উত্তর খুব বেশি হলে, ফলাফল মোড 10^9+7.

ফেরত দিন

সুতরাং, ইনপুট যদি nums =[4, 7, 3] k =2 এর মত হয়, তাহলে আউটপুট হবে 17, যেহেতু 4-এর বাইনারি উপস্থাপনা হল 100, 3 হল 011, এবং 7 হল 111। যেহেতু আমাদের সেট করতে হবে। 2 বিট, আমরা এটিকে 111 (7) করতে 4 এর বিট সেট করতে পারি। তাহলে মোট যোগফল হল 7 + 7 + 3 =17।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:

  • উত্তর :=0, i :=0

  • যখন k অ-শূন্য, কর

    • প্রতিটি n সংখ্যার জন্য, করুন

      • যদি (n / 2^i) জোড় হয়, তাহলে

        • উত্তর :=ans + 2^i

        • k :=k - 1

        • k যদি 0 এর সমান হয়, তাহলে

          • লুপ থেকে বেরিয়ে আসুন

    • i :=i + 1

  • রিটার্ন (উত্তর + সংখ্যার সমস্ত উপাদানের যোগফল) mod m

আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:

উদাহরণ

class Solution:
   def solve(self, nums, k):
      m = (10 ** 9 + 7)
      ans = 0
      i = 0
      while k:
         for n in nums:
            if (n >> i) & 1 == 0:
               ans += 1 << i
               k -= 1
               if k == 0:
                  break
                  i += 1
      return (ans + sum(nums)) % m

ob = Solution()
nums = [4, 7, 3]
k = 2
print(ob.solve(nums, k))

ইনপুট

[4, 7, 3], 2

আউটপুট

17

  1. পাইথন প্রোগ্রাম একটি তালিকার ক্রমবর্ধমান যোগফল খুঁজে বের করতে

  2. পাইথন প্রোগ্রাম তালিকায় উপাদানের যোগফল খুঁজে বের করতে

  3. একটি তালিকা থেকে N বৃহত্তম উপাদান খুঁজে পেতে পাইথন প্রোগ্রাম

  4. পাইথনে সংখ্যার তালিকার যোগফল কীভাবে খুঁজে পাবেন?