สมมติว่าเรามีเมทริกซ์ไบนารี 2 มิติ ที่นี่แต่ละแถวจะเรียงลำดับจากน้อยไปมาก โดยที่ 0 มาก่อน 1 วินาที เราต้องหาดัชนีคอลัมน์ซ้ายสุดที่มีค่า 1 หากไม่มีผลลัพธ์ดังกล่าว ให้คืนค่า -1
ดังนั้นหากอินพุตเป็นแบบ
0 | 0 | 0 | 1 |
0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 |
ผลลัพธ์จะเป็น 2 เนื่องจากคอลัมน์ที่สองเหลือ 1 มากที่สุดในเมทริกซ์ทั้งหมด
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
-
หากเมทริกซ์ว่างเปล่า
-
กลับ -1
-
-
N :=จำนวนแถวของเมทริกซ์
-
M :=จำนวนคอลัมน์ของเมทริกซ์
-
ผม :=0, j :=M - 1
-
ซ้ายสุด :=-1
-
ในขณะที่ i
=0 ทำ -
ถ้า matrix[i, j] เท่ากับ 0 แล้ว
-
ผม :=ผม + 1
-
-
มิฉะนั้น
-
ซ้ายสุด :=j
-
เจ :=เจ - 1
-
-
-
กลับซ้ายสุด
ตัวอย่าง
class Solution: def solve(self, matrix): if not matrix or not matrix[0]: return -1 N = len(matrix) M = len(matrix[0]) i = 0 j = M - 1 leftmost = -1 while i < N and j >= 0: if matrix[i][j] == 0: i += 1 else: leftmost = j j -= 1 return leftmost ob = Solution() matrix = [ [0, 0, 0, 1], [0, 0, 1, 1], [0, 0, 1, 1], [0, 0, 1, 0] ] print(ob.solve(matrix))
อินพุต
[ [0, 0, 0, 1], [0, 0, 1, 1], [0, 0, 1, 1], [0, 0, 1, 0] ]
ผลลัพธ์
2