154寻找旋转排序数组中的最小值II

📃 题目描述#

题目链接:寻找旋转排序数组中的最小值IIimage-20220126010606905

🔔 解题思路#

和上题同理:数组特点有 nums[mid] < nums[right],最小值肯定在mid左边,nums[mid] > nums[right],最小值肯定在mid右边,但是 nums[mid] = nums[right]的时候,可能在左边也在右边,如[0,1,1,1,1]、[1,1,1,0,1],可以剪掉right

Copy
int findMin(vector<int>& nums) { int left = 0, right = nums.size() - 1; int mid; while (left < right) { mid = left + ((right - left) >> 1); if (nums[mid] > nums[right]) left = mid + 1; else if (nums[mid] < nums[right]) right = mid; else right--;//证明左边都是同一个数字,可以砍掉最右的那个位置 } return nums[left]; }

💥 复杂度分析#

  • 空间复杂度:o(logn)
  • 时间复杂度:O(1)
posted @   D-booker  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
CONTENTS