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