当前位置: 首页 > 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.lqws.cn/news/577945.html

相关文章:

  • 【软考高项论文】论信息系统项目的干系人管理
  • 百度文库智能PPT月访问量超3400万,用户规模翻倍增长
  • 中钧科技亮相2025 亚欧商品贸易博览会,赋能数字经济新未来!
  • pyspark driver 上传pod本地文件到对象存储
  • AWS 开源 Strands Agents SDK,简化 AI 代理开发流程
  • Hive SQL 实战:电商销售数据分析全流程案例
  • Git远程仓库迁移与分支关联技术分享
  • 【Python使用】嘿马python运维开发全体系教程第2篇:日志管理,Linux概述【附代码文档】
  • 【硬核数学 · LLM篇】3.1 Transformer之心:自注意力机制的线性代数解构《从零构建机器学习、深度学习到LLM的数学认知》
  • Android Compose Modifier 详细解析
  • K8s-Pod深度解析
  • 鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(五)
  • 阶段二开始-第一章—8天Python从入门到精通【itheima】-121节+122节(函数和方法的类型注解+Union联合类型注解)
  • Ruby 安装使用教程
  • 单例模式7种实现
  • Golang的多环境配置
  • Golang快速开发框架——项目立项与系统配置读取组件viper(一)
  • uni-app使用uview2自定义tabber
  • camera调试:安卓添加xml注册
  • 【软考高项论文】论信息系统项目的整体管理
  • Java 图书管理系统
  • 使用Verilog设计模块输出中位数,尽可能较少资源使用
  • 华为智选焕新鸿蒙智选,继续携手IAM赋能智慧家居健康生态协同演进
  • SmartDV推出先进的H.264和H.265视频编码器和解码器IP
  • Flutter 布局之 IntrinsicHeight 组件
  • 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)
  • 系统性能优化-8 TCP缓冲区与拥塞控制
  • Java开发新变革!飞算JavaAI深度剖析与实战指南
  • 深入理解 MVCC:数据库高并发的核心引擎
  • 高效数据采集:Python与Rust完美结合