কম্পিউটার

পাইথনে সিটি স্কাইলাইন রাখতে সর্বোচ্চ বৃদ্ধি


ধরুন আমাদের গ্রিড নামে একটি 2-মাত্রিক অ্যারে আছে, যেখানে গ্রিড[i][j] এর প্রতিটি মান সেখানে অবস্থিত একটি বিল্ডিংয়ের উচ্চতা উপস্থাপন করে। আমরা যেকোন সংখ্যক ভবনের উচ্চতা যেকোন পরিমাণে বাড়াতে পারি। উচ্চতা 0 একটি বিল্ডিং হিসাবে বিবেচিত হয়. শেষে, "স্কাইলাইন" যখন গ্রিডের চারটি দিক থেকে দেখা হয়, সেটি অবশ্যই মূল গ্রিডের স্কাইলাইনের মতোই হতে হবে। কারণ একটি শহরের আকাশরেখা হল দূর থেকে দেখলে সমস্ত বিল্ডিং দ্বারা গঠিত আয়তক্ষেত্রগুলির বাইরের কনট্যুর। তাই আমাদের সর্বোচ্চ মোট যোগফল খুঁজে বের করতে হবে যে বিল্ডিংয়ের উচ্চতা বাড়ানো যায়।

সুতরাং, যদি ইনপুট মত হয়

3 0 8 4
2 4 5 7
9 2 3 6
0 3 1 0

তাহলে আউটপুট হবে 35, এর কারণ হল উপরের বা নিচ থেকে যে স্কাইলাইন দেখা হয়েছে তা হল:[9, 4, 8, 7], বাম বা ডান দিক থেকে দেখা স্কাইলাইন হল:[8, 7, 9, 3], তাই চূড়ান্ত ম্যাট্রিক্স −

এর মত হতে পারে
8 4 8 7
7 4 7 7
9 4 8 7
3 3 3 3

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

  • max_row_wise :=একটি নতুন তালিকা

  • max_column_wise :=একটি নতুন তালিকা

  • কাউন্টার :=0

  • গ্রিডে থাকা প্রতিটি i এর জন্য করুন

    • max_row_wise

      এর শেষে সর্বাধিক i ঢোকান
    • কাউন্টার :=কাউন্টার + 1

  • কাউন্টার :=0, i :=0, j :=0

  • temp_list :=একটি নতুন তালিকা

  • নিম্নলিখিতটি অসীমভাবে করুন -

    • temp_list

      -এ গ্রিড[i,j] সন্নিবেশ করান
    • i :=i + 1

    • যদি j গ্রিড[0] -1 এবং i>=len(গ্রিড) এর আকারের সমান হয়, তাহলে

      • max_column_wise

        এর শেষে সর্বাধিক temp_list সন্নিবেশ করুন
      • লুপ থেকে বেরিয়ে আসুন

    • অন্যথায় যখন i>=গ্রিডের আকার, তারপর

      • i :=0, j :=j + 1

      • max_column_wise

        এর শেষে সর্বাধিক temp_list সন্নিবেশ করুন
      • কাউন্টার :=কাউন্টার + 1

      • temp_list:=একটি নতুন তালিকা

  • টপ_বটম, বাম_ডান :=সর্বোচ্চ_সারি_ভিত্তিক, সর্বোচ্চ_কলাম_ভিত্তিক

  • i, j, মান :=0,0,0

  • নিম্নলিখিতটি অসীমভাবে করুন, করুন

    • temp :=সর্বনিম্ন [top_bottom[i], left_right[j]]

    • j :=j + 1

    • যদি j গ্রিডের কলামের দৈর্ঘ্যের সমান হয় এবং i গ্রিড -1-এর সারি গণনার সমান হয়, তাহলে

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

    • অন্যথায় যখন j গ্রিড কলামের আকারের সমান হয়, তখন

      • i :=i+1

      • j :=0

  • ফেরত মান

উদাহরণ

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

class Solution:
   def maxIncreaseKeepingSkyline(self, grid):
      max_row_wise = []
      max_column_wise = []
      counter = 0
      for i in grid:
         max_row_wise.append(max(i))
         counter+=1
      counter = 0
      i = 0
      j = 0
      temp_list = []
      while True:
         temp_list.append(grid[i][j])
         i+=1
         if j ==len(grid[0])-1 and i>=len(grid):
            max_column_wise.append(max(temp_list))
            break
         elif i >= len(grid):
            i = 0
            j = j + 1
            max_column_wise.append(max(temp_list))
            counter +=1
            temp_list=[]
      top_bottom, left_right = max_row_wise,max_column_wise
      i, j, value = 0,0,0
      while True:
         temp = min([top_bottom[i], left_right[j]])
         value+= abs(grid[i][j] - temp)
         j+=1
         if j == len(grid[0]) and i==len(grid)-1:
            break
         elif j == len(grid[0]):
            i = i+1
            j = 0
      return value

ob = Solution()
print(ob.maxIncreaseKeepingSkyline([[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,
3,1,0]]))

ইনপুট

[[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]

আউটপুট

35

  1. পাইথন:একটি তালিকায় সর্বোচ্চ মানের সূচক পুনরুদ্ধার করুন

  2. Python ValueError:max() arg হল একটি খালি সিকোয়েন্স সলিউশন

  3. হিপ চেক করার প্রোগ্রামটি পাইথনে সর্বোচ্চ হিপ তৈরি করছে নাকি নয়

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