云服务器 网站,企业网站域名空间,网站建设营销策划书,网站建设与管理初级教学描述
给定一个长度为n的列表nums#xff0c;请你找到峰值并返回其索引。数组可能包含多个峰值#xff0c;在这种情况下#xff0c;返回任何一个所在位置即可。 #xff08;1#xff09;峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于#xff1b; 请你找到峰值并返回其索引。数组可能包含多个峰值在这种情况下返回任何一个所在位置即可。 1峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于 2列表两个边界可以看成是最小nums[0]nums[-1] −∞ 3对于所有有效的 i 都有 nums[i] ! nums[i 1]。 样例
输入
2 4 1 2 7 8 4
输出
5
代码
nums []
s input().split( )
for x in s:nums.append(float(x))
left, right 0, len(nums) - 1
while left right:mid (left right) // 2if nums[mid] nums[mid 1]:right midelse:left mid 1
print(left)
代码解析 nums []定义一个空列表用于存储输入的数字列表。s input().split( )通过input()函数获取用户输入的一行字符串并使用split( )方法将其拆分成一个字符串列表。默认情况下split()方法使用空格作为分隔符来拆分字符串。for x in s:对字符串列表s进行迭代将迭代的值依次赋给变量x。nums.append(float(x))将字符串x转换为浮点数类型并将其添加到nums列表中。left, right 0, len(nums) - 1同时为变量left和right赋初值。left表示当前搜索范围的左边界初始为0right表示当前搜索范围的右边界初始为列表的最后一个索引。while left right:当left小于right时执行循环体内的代码。这表示搜索范围还没有缩小到只有一个元素。mid (left right) // 2计算当前搜索范围的中间位置的索引。使用整数除法(//)确保mid是整数。if nums[mid] nums[mid 1]:比较mid位置上的元素值与其右边相邻元素的值。如果mid位置上的元素值大于右边相邻元素的值说明峰值在mid的左边将搜索范围缩小到[left, mid]。right mid将搜索范围的右边界更新为mid位置因为nums[mid]已经不可能是峰值可以排除掉。else:如果mid位置上的元素值小于或等于右边相邻元素的值说明峰值在mid的右边将搜索范围缩小到[mid1, right]。left mid 1将搜索范围的左边界更新为mid 1因为mid位置上的元素值已经被排除。print(left)打印最终得到的峰值的索引即left的值。 利用了二分查找的思想来寻找峰值。通过不断缩小搜索范围每次将搜索范围减半直到找到峰值所在的位置。