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

ตรวจสอบว่าตัวเลขเป็น Majority Element ในอาร์เรย์ที่เรียงแล้วใน Python

สมมติว่าเรามีอาร์เรย์ชื่อ nums ที่เรียงในลำดับไม่ลดลง และตัวเลข target เราต้องตรวจสอบว่า target เป็น majority element หรือไม่ ในอาร์เรย์ majority element คือองค์ประกอบที่ปรากฏมากกว่า N/2 ครั้งในอาร์เรย์ที่มีความยาว N ดังนั้นถ้าอาร์เรย์คือ [2,4,5,5,5,5,5,6,6] และ target คือ 5 ผลลัพธ์คือ true

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

  • จะมีโมดูลช่วยสองตัวคือ lower() และ upper() รายละเอียดดังนี้
  • lower() รับสองอาร์กิวเมนต์ คืออาร์เรย์ arr และ target −
    • low := 0, high := ความยาวของ arr
    • while low < high −
      • mid := low + (high - low)/2
      • ถ้า arr[mid] = target แล้ว high = mid มิฉะนั้น low = mid + 1
    • คืนค่า high เมื่อ arr[high] = target มิฉะนั้น -1
  • upper() รับสองอาร์กิวเมนต์ คืออาร์เรย์ arr และ target −
    • low = 0, high = ความยาวของ arr
    • while low < high −
      • mid = low + (high - low)/2
      • ถ้า arr[mid] = target แล้ว low = mid มิฉะนั้น high = mid - 1
    • คืนค่า low เมื่อ arr[low] = target มิฉะนั้น -1
  • ฟังก์ชันหลักจะเป็น −
    • u := upper(arr, target)
    • l := lower(arr, target)
    • คืนค่า true เมื่อ u - l + 1 > (ความยาวของ nums) / 2 ถ้า u ไม่ใช่ -1 มิฉะนั้น false

ตัวอย่าง (Python)

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

class Solution(object):
    def upper(self, n, target):
        low = 0
        high = len(n) - 1
        while low < high:
            mid = low + (high - low + 1) // 2
            if n[mid] == target:
                low = mid
            else:
                high = mid - 1
        return low if n[low] == target else -1

    def lower(self, n, target):
        low = 0
        high = len(n) - 1
        while low < high:
            mid = low + (high - low) // 2
            if n[mid] == target:
                high = mid
            else:
                low = mid + 1
        return high if n[high] == target else -1

    def isMajorityElement(self, nums, target):
        u = self.upper(nums, target)
        l = self.lower(nums, target)
        return u - l + 1 > len(nums) / 2 if u != -1 else False

ob1 = Solution()
print(ob1.isMajorityElement([2, 4, 5, 5, 5, 5, 5, 6, 6], 5))

อินพุต

[2,4,5,5,5,5,5,6,6] 5

ผลลัพธ์

true