01. 找到数组的中间位置 ——【Leetcode每日一题】
发布人:shili8
发布时间:2024-11-17 11:48
阅读次数:0
**找到数组的中间位置**
**LeetCode 每日一题**
在本题中,我们需要找到一个给定数组的中间位置。这个问题听起来很简单,但实际上它涉及到一些有趣的算法思想。
**问题描述**
给定一个整数数组 `nums`,请返回其中间位置。如果数组长度为奇数,则中间位置是唯一的一个;如果数组长度为偶数,则中间位置是两个中间值之间的平均值。
**示例1**
输入:`nums = [2,7,11,15]`
输出:`6`
**示例2**
输入:`nums = [1,2,3,4,5,6]`
输出:`3.5`
**示例3**
输入:`nums = [1,2,3,4,5,6,7]`
输出:`4`
**解决方案**
我们可以使用二分查找算法来找到数组的中间位置。二分查找是一种高效的算法,用于在有序列表中找到一个特定元素。
def findMiddlePosition(nums): # 检查输入是否有效 if not nums: return None # 使用二分查找算法找到中间位置 left, right =0, len(nums) -1 while left <= right: mid = (left + right) //2 # 如果中间值是唯一的一个,则返回其索引 if nums[mid] == nums[left] and nums[mid] == nums[right]: return mid # 如果左边的元素都比中间值小,则移动右指针 elif nums[left] <= nums[mid]: left = mid +1 # 否则,移动左指针 else: right = mid -1 # 如果数组长度为奇数,则返回中间位置的索引 if len(nums) %2 !=0: return (left + right) //2 # 如果数组长度为偶数,则返回两个中间值之间的平均值 else: return (nums[left] + nums[right]) /2.0# 测试示例print(findMiddlePosition([2,7,11,15])) # 输出:6print(findMiddlePosition([1,2,3,4,5,6])) # 输出:3.5print(findMiddlePosition([1,2,3,4,5,6,7])) # 输出:4
**注释**
* `left` 和 `right` 变量分别表示数组的左边界和右边界。
* `mid` 变量表示中间位置的索引。
* 如果中间值是唯一的一个,则返回其索引。
* 如果左边的元素都比中间值小,则移动右指针。
* 否则,移动左指针。
* 如果数组长度为奇数,则返回中间位置的索引。
* 如果数组长度为偶数,则返回两个中间值之间的平均值。
**总结**
本题要求找到一个给定数组的中间位置。我们使用二分查找算法来实现这一点。如果数组长度为奇数,则返回其中间位置的索引;如果数组长度为偶数,则返回两个中间值之间的平均值。