สมมติว่าเรามีสองอาร์เรย์ rowSum และ colSum ที่มีค่าไม่เป็นลบ โดยที่ rowSum[i] มีผลรวมขององค์ประกอบในแถว ith และ colSum[j] มีผลรวมขององค์ประกอบในคอลัมน์ jth ของเมทริกซ์ 2 มิติ เราต้องหาเมทริกซ์ใดๆ ที่มีค่าขนาดไม่เป็นลบ (ขนาด rowSum x ขนาด colSum) ที่ตรงกับค่า rowSum และ colSum ที่กำหนด
ดังนั้น หากอินพุตเป็นเหมือน rowSum =[13,14,12] colSum =[9,13,17] ผลลัพธ์จะเป็น
9 | 4 | 0 |
0 | 9 | 5 |
0 | 0 | 12 |
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- เมทริกซ์ :=สร้างเมทริกซ์ว่าง
- เข้าชมแล้ว :=ชุดใหม่
- กำหนดฟังก์ชัน maximum() นี่จะใช้เวลา r,c
- min_total :=อินฟินิตี้
- ประเภท :=สตริงว่าง
- สำหรับฉันในช่วง 0 ถึงขนาด r - 1 ทำ
- ถ้า r[i]
- ดัชนี :=ผม
- ประเภท :='แถว'
- min_total :=r[i]
- ถ้า r[i]
- ถ้า c[i]
- min_total :=c[i]
- type :='col'
- ดัชนี :=ผม
- r[index] :=อินฟินิตี้
- สำหรับ i ในช่วง 0 ถึงขนาด c - 1 ให้ทำ
- ถ้า c[i] ไม่เหมือนกับอินฟินิตี้และ c[i]>=min_total แล้ว
- c[i] :=c[i] - min_total
- เมทริกซ์[ดัชนี, i] :=min_total
- ออกมาจากลูป
- ถ้า c[i] ไม่เหมือนกับอินฟินิตี้และ c[i]>=min_total แล้ว
- c[index] :=อินฟินิตี้
- สำหรับฉันในช่วง 0 ถึงขนาด r - 1 ทำ
- ถ้า r[i] ไม่เหมือนกับอินฟินิตี้และ r[i]>=min_total แล้ว
- r[i] :=r[i] - min_total
- เมทริกซ์[i, ดัชนี] :=min_total
- ออกมาจากลูป
- ถ้า r[i] ไม่เหมือนกับอินฟินิตี้และ r[i]>=min_total แล้ว
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(r, c): matrix = [[0]*len(c) for _ in range(len(r))] visited = set() def minimum(r,c): min_total = float('inf') type = '' for i in range(len(r)): if(r[i] < min_total): index = i type = 'row' min_total = r[i] for i in range(len(c)): if(c[i] < min_total): min_total = c[i] type = 'col' index = i if(type == 'row'): r[index] = float('inf') for i in range(len(c)): if(c[i] != float('inf') and c[i] >= min_total): c[i] -= min_total matrix[index][i] = min_total break if(type == 'col'): c[index] = float('inf') for i in range(len(r)): if(r[i] != float('inf') and r[i] >= min_total): r[i] -= min_total matrix[i][index] = min_total break visited.add((index,type)) while len(visited) != len(r)+len(c): minimum(r,c) return matrix rowSum = [13,14,12] colSum = [9,13,17] print(solve(rowSum, colSum))
อินพุต
[13,14,12], [9,13,17]
ผลลัพธ์
[[9, 4, 0], [0, 9, 5], [0, 0, 12]]