สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums เราต้องหาดัชนีขององค์ประกอบพีคทุกตัวใน nums โดยเรียงลำดับจากน้อยไปมาก ดัชนี i ขององค์ประกอบพีคเมื่อตรงตามเงื่อนไขทั้งสามนี้:1. ตัวเลขถัดไปทางด้านขวาซึ่งแตกต่างจาก nums[i] ไม่มีอยู่หรือต้องน้อยกว่า nums[i] 2. ตัวเลขก่อนหน้าบน ทางด้านซ้ายหรือด้านขวาของ nums[i] ไม่มีหรือต้องน้อยกว่า nums[i] 3 มีตัวเลขทางด้านซ้ายหรือด้านขวาอย่างน้อยหนึ่งตัวซึ่งแตกต่างจาก nums[i]
ดังนั้น หากอินพุตเท่ากับ nums =[5, 8, 8, 8, 6, 11, 11] ผลลัพธ์จะเป็น [1, 2, 3, 5, 6] เพราะที่ราบสูงของ 8s ถือเป็น พีค [1,2,3] และ 11s ก็เช่นกัน [5, 6]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n :=ขนาดของ nums
- ans :=รายการใหม่
- ผม :=0
- ในขณะที่ฉัน
- i0 :=ฉัน
- ในขณะที่ i
- ผม :=ผม + 1
- ถ้า i0 ไม่ใช่ 0 หรือ i ไม่ใช่ n แล้ว
- แทรก a (รายการจาก i0 ถึง i-1) ต่อท้ายคำตอบ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(nums): n = len(nums) ans = [] i = 0 while i < n: i0 = i while i < n and nums[i] == nums[i0]: i += 1 if (i0 == 0 or nums[i0] > nums[i0 - 1]) and (i == n or nums[i0] > nums[i]): if i0 != 0 or i != n: ans.extend(range(i0, i)) return ans nums = [5, 8, 8, 8, 6, 11, 11] print(solve(nums))
อินพุต
[5, 8, 8, 8, 6, 11, 11]
ผลลัพธ์
[1, 2, 3, 5, 6]