โจทย์
ให้อาร์เรย์ nums และความยาว k หาสับอาร์เรย์ความยาว k ที่ "มากที่สุด" โดยเปรียบเทียบแบบ Lexicographical: สับอาร์เรย์ A มากกว่า B หากมีดัชนี i ที่ A[i] ≠ B[i] และ A[i] > B[i]
ตัวอย่าง: nums = [5, 3, 7, 9], k = 2 ผลลัพธ์ [7, 9]
อัลกอริทึม
- เริ่มจากดัชนี
start = len(nums) - k(สับอาร์เรย์สุดท้ายที่เป็นไปได้) - เก็บค่าสูงสุด
max_elementและดัชนีmax_index - วนลูปย้อนกลับจาก
startถึง 0 หาค่าสูงสุด - คืนสับอาร์เรย์
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]