สมมติว่าเรามีอาร์เรย์ 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