Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Kth องค์ประกอบที่เล็กที่สุดในเมทริกซ์ที่เรียงลำดับใน Python


สมมติว่าเรามีเมทริกซ์ขนาด n x n โดยที่แต่ละแถวและคอลัมน์ถูกจัดเรียงตามลำดับที่เพิ่มขึ้น เราต้องหาองค์ประกอบที่เล็กที่สุดที่ k ในเมทริกซ์ โปรดทราบว่ามันเป็นองค์ประกอบที่เล็กที่สุดลำดับที่ k ในลำดับการจัดเรียง ไม่ใช่องค์ประกอบเฉพาะลำดับที่ k ดังนั้นหากอินพุตเป็น [[1,5,9],[10,11,13],[12,13,15]] หาก k =8 ผลลัพธ์จะเป็น 13

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดวิธีหนึ่งที่เรียกว่า checkVal() และอาร์กิวเมนต์คือเมทริกซ์และค่า
  • i :=0, j :=ความยาวของเมทริกซ์[0] – 1, ตัวนับ :=0
  • ในขณะที่ i <ความยาวของเมทริกซ์และ j>=0
    • ถ้าค่า matrix[i, j]> แล้วลด j ลง 1 มิฉะนั้น ตัวนับ :=ตัวนับ + j + 1 ให้เพิ่ม i ขึ้น 1
  • เคาน์เตอร์คืนสินค้า
  • วิธีหลักจะเป็นเช่น −
  • n :=แถวของเมทริกซ์ สูง :=องค์ประกอบมุมขวาล่าง ต่ำ :=องค์ประกอบมุมบนซ้าย
  • ในขณะที่ต่ำ <=สูง ทำ
    • กลาง =ต่ำ + (สูง – ต่ำ)/2
    • จำนวน :=checkVal(เมทริกซ์ กลาง)
    • ถ้านับ
  • ผลตอบแทนต่ำ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution(object):
   def kthSmallest(self, matrix, k):
      """
      :type matrix: List[List[int]]
      :type k: int
      :rtype: int
      """
      n = len(matrix)
      high = matrix[n-1][n-1]
      low = matrix[0][0]
      while low<=high:
         mid = low + (high - low) /2
         count = self.check_value(matrix,mid)
         if count< k:
            low = mid+1
         else :
            high = mid-1
      return int(low)
   def check_value(self, matrix, value):
      i = 0
      j = len(matrix[0])-1
      counter = 0
      while(i<len(matrix) and j >=0):
         if matrix[i][j] > value:
            j-=1
         else:
            counter+=j+1
            i+=1
      return counter
matrix = [[1,5,9],[10,11,13],[12,13,15]]
ob = Solution()
print(ob.kthSmallest(matrix, 8))

อินพุต

matrix =[[1,5,9],[10,11,13],[12,13,15]]
k = 8

ผลลัพธ์

13