39. 恢复旋转排序数组
找到旋转点:遍历数组,找到第一个满足nums[i] > nums[i+1]的位置i。这个位置即为旋转点。 处理旋转点:如果没有找到旋转点(即数组已经排好序),则直接返回数组。 反转子数组:将数组分为两部分,分别反转0到i的部分和i+1到末尾的部分。 反转整个数组:最后反转整个数组,使其恢复为有序状态。 找到旋转点:循环遍历数组,找到第一个满足条件的i。 反转子数组:分别反转从0到i和i+1到末尾的子数组。 反转整个数组:最后反转整个数组,使其恢复为有序状态。
发布日期:2025-06-20 03:06:40
浏览次数:6
分类:精选文章
本文共 1174 字,大约阅读时间需要 3 分钟。
为了恢复一个旋转排序数组到有序状态,我们可以使用三步翻转法。该方法的时间复杂度为O(n),并且只需O(1)的额外空间。以下是详细的步骤:
以下是实现代码:
class Solution: def recoverRotatedSortedArray(self, nums): if not nums: return nums l = len(nums) # 找到旋转点i i = 0 while i < l - 1: if nums[i] > nums[i+1]: break i += 1 if i == l - 1: # 数组已经排好序 return nums # 反转0到i self.reverse_subarray(nums, 0, i) # 反转i+1到l-1 self.reverse_subarray(nums, i+1, l-1) # 反转整个数组 self.reverse_subarray(nums, 0, l-1) return nums def reverse_subarray(self, nums, start, end): while start < end: nums[start], nums[end] = nums[end], nums[start] start += 1 end -= 1
示例测试:
nums = [4, 5, 1, 2, 3]solution = Solution()solution.recoverRotatedSortedArray(nums)print(nums) # 输出: [1, 2, 3, 4, 5]
代码解释:
这种方法确保了在O(n)时间和O(1)额外空间内完成任务,适用于所有旋转排序数组。
发表评论
最新留言
感谢大佬
[***.8.128.20]2026年05月30日 23时29分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Pix2Pix如何工作?
2023-03-02
QuickBI助你成为分析师——搞定数据源
2023-03-02
pkl来存储python字典
2023-03-02
quick sort | 快速排序 C++ 实现
2023-03-02
pkpmbs 建设工程质量监督系统 文件上传漏洞复现
2023-03-02