สมมติว่าเรามีอาร์เรย์ที่เรียกว่า 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 และสูงสุด
- ถ้า nums[i] <0 แล้ว
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
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