假设我们有一个名为nums的成员列表,并找到以nums为单位的最长子列表的长度,以使每个连续数字之间的相等关系在小于和大于之间改变。前两个数字的不等式可以小于或大于。
因此,如果输入类似于nums = [1、2、6、4、5],则输出将为4,因为最长不等式交替子列表为[2、6、4、5],因为2 <6> 4 <5。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数get_direction()。这需要a,b
如果a与b相同则返回0,否则返回-1如果a <b否则返回1
如果nums <2
返回的数字大小
max_length:= 1,cur_length:= 1,last_direction:= 0
对于范围从0到nums的i-1,执行
cur_length:= cur_length + 1
cur_length:= 2
cur_length:= 1
方向:= get_direction(nums [i],nums [i + 1])
如果方向等于0,则
否则,当direction与last_direction相同时,则
除此以外,
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