当前位置:实例文章 » JAVA Web实例» [文章]代码随想录额外题目| 数组02 ●189旋转数组 ●724寻找数组中心索引

代码随想录额外题目| 数组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寻找数组中心索引。我们使用滑动窗口法和二分查找法来解决这些问题,分别实现了最大可能长度和中间下标的计算。

其他信息

其他资源

Top