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

โปรแกรมค้นหาความยาวของรายการย่อยองค์ประกอบอสมการสลับที่ยาวที่สุดใน Python


สมมติว่าเรามีรายการของ mumbers ที่เรียกว่า nums และหาความยาวของ innum ย่อยที่ยาวที่สุด ซึ่งความสัมพันธ์ที่เท่าเทียมกันระหว่างทุกตัวเลขที่ต่อเนื่องกันจะเปลี่ยนไปหรือระหว่างการดำเนินการที่น้อยกว่าและมากกว่า อสมการสองจำนวนแรกอาจน้อยกว่าหรือมากกว่า

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[1, 2, 6, 4, 5] ผลลัพธ์จะเป็น 4 เนื่องจากรายการย่อยที่ไม่เท่ากันสลับกันที่ยาวที่สุดคือ [2, 6, 4, 5] เป็น 2 <6> 4 <5.

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

  • กำหนดฟังก์ชัน get_direction() นี่จะใช้เวลา a, b

    • คืนค่า 0 ถ้า a เหมือนกับ b มิฉะนั้น -1 ถ้า a

  • ถ้าขนาดของ nums <2 แล้ว

    • ขนาดส่งคืนของ nums

  • max_length :=1, cur_length :=1, last_direction :=0

  • สำหรับฉันในช่วง 0 ถึงขนาดของ nums - 1 ทำ

    • ทิศทาง :=get_direction(nums[i], nums[i + 1])

    • ถ้าทิศทางเหมือนกับ 0 แล้ว

      • cur_length :=1

    • มิฉะนั้นเมื่อทิศทางเหมือนกับ last_direction แล้ว

      • cur_length :=2

    • มิฉะนั้น

      • cur_length :=cur_length + 1

    • max_length :=สูงสุดของ max_length และ cur_length

    • last_direction :=ทิศทาง

  • คืนค่า max_length

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

ตัวอย่าง

class Solution:
   def solve(self, nums):
      if len(nums) < 2:
         return len(nums)
      def get_direction(a, b):
         return 0 if a == b else -1 if a < b else 1
      max_length = 1
      cur_length = 1
      last_direction = 0
      for i in range(len(nums) - 1):
         direction = get_direction(nums[i], nums[i + 1])
         if direction == 0:
            cur_length = 1
         elif direction == last_direction:
            cur_length = 2
         else:
            cur_length += 1
         max_length = max(max_length, cur_length)
         last_direction = direction
      return max_length
ob = Solution()
nums = [1, 2, 6, 4, 5]
print(ob.solve(nums))

อินพุต

[1, 2, 6, 4, 5]

ผลลัพธ์

4