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

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

โจทย์

ให้อาร์เรย์ nums และความยาว k หาสับอาร์เรย์ความยาว k ที่ "มากที่สุด" โดยเปรียบเทียบแบบ Lexicographical: สับอาร์เรย์ A มากกว่า B หากมีดัชนี i ที่ A[i] ≠ B[i] และ A[i] > B[i]

ตัวอย่าง: nums = [5, 3, 7, 9], k = 2 ผลลัพธ์ [7, 9]

อัลกอริทึม

  1. เริ่มจากดัชนี start = len(nums) - k (สับอาร์เรย์สุดท้ายที่เป็นไปได้)
  2. เก็บค่าสูงสุด max_element และดัชนี max_index
  3. วนลูปย้อนกลับจาก start ถึง 0 หาค่าสูงสุด
  4. คืนสับอาร์เรย์ nums[max_index : max_index + k]

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

def solve(nums, k):
    start = len(nums) - k
    max_element = nums[start]
    max_index = start
    while start >= 0:
        if nums[start] > max_element:
            max_element = nums[start]
            max_index = start
        start -= 1
    return nums[max_index:max_index + k]

print(solve([5, 3, 7, 9], 2))  # Output: [7, 9]

อินพุต / เอาต์พุต

Input: [5, 3, 7, 9], 2
Output: [7, 9]