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

ตรวจสอบว่า subarray กับผลิตภัณฑ์ที่ระบุมีอยู่ในอาร์เรย์ใน Python . หรือไม่


สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums ซึ่งประกอบไปด้วยตัวเลขบวกและลบ เรามีค่า k อีกค่าหนึ่ง เราต้องตรวจสอบว่า subarray ใดที่มีผลิตภัณฑ์ k อยู่ในอาร์เรย์หรือไม่

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[-2,-1,1,3,5,8], k =6 เอาต์พุตจะเป็น True เนื่องจากอาร์เรย์ย่อยเป็น [-2,-1,3]

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

  • ขั้นต่ำ :=nums[0], สูงสุด :=nums[0]
  • prod_max :=nums[0]
  • สำหรับฉันในช่วง 1 ถึงขนาดของ nums - 1 ทำ
    • ถ้า nums[i] <0 แล้ว
      • สลับสูงสุดและต่ำสุด
    • สูงสุด :=สูงสุดของ nums[i] และ (สูงสุด * nums[i])
    • ขั้นต่ำ :=ขั้นต่ำของ nums[i] และ (ขั้นต่ำ * nums[i])
    • ถ้าค่าต่ำสุดหรือสูงสุดเท่ากับ k แล้ว
      • คืนค่า True
    • prod_max :=สูงสุดของ prod_max และสูงสุด
  • คืนค่าเท็จ

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

โค้ดตัวอย่าง

def solve(nums, k):
   minimum = nums[0]
   maximum = nums[0]
 
   prod_max = nums[0]
 
   for i in range( 1, len(nums)):
      if nums[i] < 0:
         maximum, minimum = minimum, maximum

      maximum = max(nums[i], maximum * nums[i])
      minimum = min(nums[i], minimum * nums[i])

      if minimum == k or maximum == k:
         return True
 
      prod_max = max(prod_max, maximum)
   return False

nums = [-2,-1,1,3,5,8]
k = 6
print(solve(nums, k))

อินพุต

[-2,-1,1,3,5,8], 6

ผลลัพธ์

True