สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums ซึ่งมีค่าไม่ซ้ำกันตั้งแต่ช่วง [0, n – 1] อาร์เรย์นี้ไม่ได้เรียงลำดับ เรายังมีอาร์เรย์ของคู่อื่น ๆ ซึ่งแต่ละคู่มีดัชนีที่สามารถสลับองค์ประกอบของอาร์เรย์ได้ เราสลับกันได้หลายครั้ง เราต้องตรวจสอบว่าเราสามารถจัดเรียงอาร์เรย์ตามลำดับโดยใช้ swaps เหล่านี้ได้หรือไม่
ดังนั้น หากอินพุตเป็น nums =[6,1,7,3,0,5,4,2] คู่ =[(0,4),(6,0),(2,7)] ดังนั้น เอาต์พุตจะเป็น True เนื่องจากเราสามารถสลับอาร์เรย์ดัชนี (2,7) จะเป็น [6,1,2,3,0,5,4,7] จากนั้นสลับ (6,0) อาร์เรย์จะเป็น [4, 1,2,3,0,5,6,7] จากนั้นสลับ (0,4) เพื่อรับ [0,1,2,3,4,5,6,7]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- N :=ขนาดของ nums, P :=จำนวนคู่ในอาร์เรย์คู่
- v :=รายการที่มีจำนวนรายการย่อย N
- เข้าชมแล้ว :=ชุดใหม่
- สำหรับ i ในช่วง 0 ถึง P ให้ทำ
- แทรกดัชนีที่สองของคู่[i] ลงใน v[ดัชนีแรกของคู่[i]]
- แทรกดัชนีแรกของคู่[i] ลงใน v[ดัชนีที่สองของคู่[i]]
- สำหรับผมในช่วง 0 ถึง N ให้ทำ
- ถ้าไม่มาเยี่ยมแล้ว
- que :=คิวสองสิ้นสุด
- arr_first :=รายการใหม่
- arr_second :=รายการใหม่
- ทำเครื่องหมายว่าเยี่ยมชมแล้ว
- ใส่ i ต่อท้าย que
- ในขณะที่ que ไม่ว่างเปล่า ให้ทำ
- u :=องค์ประกอบด้านหน้าของ que และลบองค์ประกอบด้านหน้าของ que
- ใส่ u ต่อท้าย arr_first
- ใส่ nums[u] ต่อท้าย arr_second
- สำหรับแต่ละ s ใน v[u] ทำ
- ถ้าไม่มาเยี่ยมก็
- ทำเครื่องหมายว่าเข้าชมแล้ว
- ใส่ s ต่อท้าย que
- ถ้าไม่มาเยี่ยมก็
- arr_first :=เรียงลำดับรายการ arr_first
- arr_second :=เรียงลำดับรายการ arr_second
- ถ้า arr_first ไม่เหมือนกับ arr_second แล้ว
- คืนค่าเท็จ
- ถ้าไม่มาเยี่ยมแล้ว
- คืนค่า True
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
from collections import deque def solve(nums, pairs): N = len(nums) P = len(pairs) v = [[] for i in range(N)] visited = set() for i in range(P): v[pairs[i][0]].append(pairs[i][1]) v[pairs[i][1]].append(pairs[i][0]) for i in range(N): if i not in visited: que = deque() arr_first = [] arr_second = [] visited.add(i) que.append(i) while len(que) > 0: u = que.popleft() arr_first.append(u) arr_second.append(nums[u]) for s in v[u]: if s not in visited: visited.add(s) que.append(s) arr_first = sorted(arr_first) arr_second = sorted(arr_second) if arr_first != arr_second: return False return True nums = [6,1,7,3,0,5,4,2] pairs = [(0,4),(6,0),(2,7)] print(solve(nums, pairs))
อินพุต
[6,1,7,3,0,5,4,2], [(0,4),(6,0),(2,7)]
ผลลัพธ์
True