当前位置: 首页 > news >正文

第81题:搜索旋转排序数组Ⅱ

题目描述:

已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。

在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为nums[k],nums[k+1],......nums[n-1],nums[0],nums[1],......nums[k-1](下标从0开始计数)。例如【0 1 2 4 4 4 5 6 6 7】在下标5处旋转后可能变为【4 5 6 6 7 0 1 2 4 4】

给你旋转后的数组nums和一个整数target,请你编写一个函数来判断给定的目标值是否存在于数组中,如果nums中存在这个目标值target,则返回true,否则返回false。

你必须尽可能减少整个操作步骤。

示例1:

输入:nums = [2,5,6,0,0,1,2], target = 0
输出:true

示例2:

输入:nums = [2,5,6,0,0,1,2], target = 3
输出:false

提示:

1 <= nums.length <= 5000
-10的4次方 <= nums[i] <= 10的4次方
题目数据保证 nums 在预先未知的某个下标上进行了旋转
-10的4次方 <= target <= 10的4次方

题解:

方法一:遍历法

bool search(int* nums, int numsSize, int target){for(int i=0;i<numsSize;i++){if(nums[i]==target) return true;}return false;
}

方法二:二分查找,为避免重复数字,增加条件选项。

可以尝试将重复数字首先去除。

bool search(int* nums, int numsSize, int target) {if (numsSize == 0) {return false;}if (numsSize == 1) {return nums[0] == target;}int l = 0, r = numsSize - 1;while (l <= r) {int mid = (l + r) / 2;if (nums[mid] == target) {return true;}if (nums[l] == nums[mid] && nums[mid] == nums[r]) {++l;--r;} else if (nums[l] <= nums[mid]) {if (nums[l] <= target && target < nums[mid]) {r = mid - 1;} else {l = mid + 1;}} else {if (nums[mid] < target && target <= nums[numsSize - 1]) {l = mid + 1;} else {r = mid - 1;}}}return false;
}
http://www.dtcms.com/a/263178.html

相关文章:

  • PHP:历经岁月沉淀的Web开发利器
  • 如何查看服务器的运行日志?
  • mysql 分组后时间没有按照最新时间倒序
  • PHP安装使用教程
  • 气候智能体:AI如何重构人类应对气候危机的决策体系?
  • FastAPI 学习(二)
  • 三态门Multisim电路仿真——硬件工程师笔记
  • 重构老项目不再“踩雷”:飞算JavaAI的本地化智能合并实战
  • react setstate
  • 【Java面试】10GB,1GB内存,如何排序?
  • 筑牢医疗AI安全防线:四重防护体系全解析
  • kubernetes(k8s)控制器与案例详解
  • 华为云Flexus+DeepSeek征文|​​华为云ModelArts Studio大模型 + WPS:AI智能PPT生成解决方案​
  • xml.etree.ElementTree.ParseError: parsing finished: 错误原因定位
  • 【Docker基础】Docker数据持久化与卷(Volume)介绍
  • 探索 AI 系统提示与模型资源库:`system-prompts-and-models-of-ai-tools`
  • 键盘第一下无反应
  • 敏捷项目开发工具【Focalboard安装指南】
  • 第三十五章 I2S——音频传输接口
  • Reactor操作符的共享与复用
  • 衡石科技使用手册-企业即时通讯工具数据问答机器人用户手册
  • iOS 应用上架踩坑实录:7 个问题 + 工具组合解决方案详解
  • 《从量子奇境到前端优化:解锁卡西米尔效应的隐藏力量》
  • web服务器搭建nginx
  • 力扣1685. 有序数组中差绝对值之和
  • Waiting for another flutter command to release the startup lock...解决方法
  • 【编译原理】期末简答题
  • ruv200 ext4文件系统调试总结
  • python包管理工具uv VS pip
  • 多重性校正:临床试验统计的关键防线