代码随想录额外题目| 数组02 ●189旋转数组 ●724寻找数组中心索引
发布人:shili8
发布时间:2025-02-13 14:39
阅读次数:0
**代码随想录 题目02: 数组**
在本题中,我们将讨论两个有趣的数组问题:189旋转数组和724寻找数组中心索引。
###1.189旋转数组**描述:**
给定一个长度为 n 的整数数组 nums 和一个目标值 target,返回满足条件 |nums[i] - nums[j]| <= t 的最大可能长度,其中 i 和 j 是下标,并且0 <= i < j < n。
**示例:**
* 输入:nums = [1,2,3,4,5], t =1* 输出:3* 解释:最长子数组是 [1,2,3],满足条件 |nums[i] - nums[j]| <= t。
**解决方案:**
我们可以使用滑动窗口法来解决这个问题。首先,我们需要找到左边界和右边界,然后根据目标值进行调整。
class Solution: def maxLengthBetweenEqualElements(self, nums: List[int], t: int) -> int: n = len(nums) left =0 right =0 max_len =1 while right < n -1: while nums[right] - nums[left] > t and left <= right: left +=1 if nums[right] == nums[left]: max_len = max(max_len, right - left +1) right +=1 return max_len
###2.724寻找数组中心索引**描述:**
如果数组长度为偶数,则返回满足条件的所有中间下标。如果数组长度为奇数,则返回唯一的中间下标。
**示例:**
* 输入:nums = [1,7,3,6,5,6], k =2* 输出:-1* 解释:由于存在两个满足条件的中间下标(0 和2),因此返回 -1。
* 输入:nums = [1,2,3,4,5,6], k =0* 输出:0**解决方案:**
我们可以使用二分查找法来解决这个问题。首先,我们需要找到左边界和右边界,然后根据目标值进行调整。
class Solution: def findCenter(self, nums: List[int]) -> int: n = len(nums) if n ==1: return nums[0] elif n ==2: return nums[0] if nums[0] == nums[1] else -1 left =0 right = n -1 while left < right: mid = (left + right) //2 if nums[mid] == nums[left]: right = mid elif nums[mid] == nums[right]: left = mid +1 else: return -1 return nums[left]
在本题中,我们讨论了两个有趣的数组问题:189旋转数组和724寻找数组中心索引。我们使用滑动窗口法和二分查找法来解决这些问题,分别实现了最大可能长度和中间下标的计算。