Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมสร้างอาร์เรย์โดยเชื่อมอาร์เรย์ย่อยของอาร์เรย์อื่นใน Python


สมมติว่าเรามีอาร์เรย์ 2D หนึ่งชุดที่เรียกว่ากลุ่ม และอีกจำนวนหนึ่งอาร์เรย์ เราต้องตรวจสอบว่าเราสามารถเลือก n disjoint subarrays จาก array nums ได้หรือไม่ โดยที่ subarray ของ ith เท่ากับ group[i] (0-indexed) และถ้า i> 0, subarray (i-1)th จะปรากฏขึ้นก่อน อาร์เรย์ย่อยของ ith เป็น nums

ดังนั้น ถ้าอินพุตเป็นเหมือนกลุ่ม =[[2,-2,-2],[4,-3,0]] nums =[1,-1,0,2,-2,-2,4,- 3,0] ผลลัพธ์จะเป็นจริงเนื่องจากอาร์เรย์ group[0] มีตั้งแต่ดัชนี 3 ถึง 5 ของ nums และ group[1] มาจากดัชนี 6 ถึง 8 ใน nums

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ผม :=0

  • สำหรับแต่ละกลุ่มในกลุ่ม ให้ทำ

    • สำหรับ j ในช่วง i ถึงขนาดของ nums - 1 ทำ

      • ถ้า subarray ของ nums[จาก index j ถึง j+ size ของ grp] เหมือนกับ grp แล้ว

        • ผม :=j + ขนาดของ grp

        • ออกจากวง

      • มิฉะนั้น

        • คืนค่าเท็จ

  • คืนค่า True

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(groups, nums):
   i = 0
   for grp in groups:
      for j in range(i, len(nums)):
         if nums[j:j+len(grp)] == grp:
            i = j + len(grp)
            break
      else:
         return False
   return True

groups = [[2,-2,-2],[4,-3,0]]
nums = [1,-1,0,2,-2,-2,4,-3,0]
print(solve(groups, nums))

อินพุต

[[2,-2,-2],[4,-3,0]], [1,-1,0,2,-2,-2,4,-3,0]

ผลลัพธ์

True