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

Leetcode33 搜索旋转排序数组

 

 题解:

/*** 旋转排序数组可分为N1 + N2两个部分,如:[4,5,6,7,1,2,3],N1为[4,5,6,7],N2为[1,2,3]** 必然满足以下两个条件:* 1. N1和N2都是分别递增的;* 2. N1中的所有元素大于N2中的所有元素;** 以上两个条件可推出:nums[0]是N1中最小的数,即nums[0] > N2中的所有元素** 而mid不是在N1内就是在N2内,如果在N1内,则在N1内使用二分查找,否则在N2内使用二分查找* 所以:如果nums[0] <= nums[mid],即mid落在了N1内,则[0, mid]肯定是有序的*       否则mid落在了N2内,则[mid, n)肯定是有序的**/
if (nums[0] <= nums[mid]) {// 左半边有序
} else {// 右半边有序
}

先判断nums[mid]是在旋转数组的左半边,还是右半边;

如果在左半边然后使用target和nums[0]和nums[mid]作比较,target处于[0,mid]中间,right = mid - 1; else left = mid + 1;

如果在右半边,使用target和nums[mid] nums[nums.length-1]作比较,target处于[mid,nums[nums.length-1]], left = mid + 1,否则right = mid-1

代码

public int search(int[] nums, int target) {if(nums.length == 0){return -1;    }int left = 0, right = nums.length - 1;while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target){return mid;}//左半边有序,在左半边使用二分查找if(nums[mid] >= nums[0]){if(nums[0] <= target && target < nums[mid]){ //target处于[0,mid),向左移动mid            right = mid - 1;}else{left = mid + 1;}}//右半边有序,在右半边使用二分查找else{if(nums[mid] < target && target <= nums[nums.length - 1]){left = mid + 1;}else{right = mid - 1;}}}return -1;}

http://www.lryc.cn/news/127426.html

相关文章:

  • docker 第一章
  • 注册中心 —— SpringCloud Netflix Eureka
  • 2023年国赛数学建模思路 - 案例:异常检测
  • ⛳ Java 反射
  • Android 13 像Settings一样开启关闭深色模式
  • 微服务实战项目-学成在线-项目优化(redis缓存优化)
  • IDEA 找不到项目 ‘org.springframework.boot:spring-boot-starter-parent:3.1.2‘
  • thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统
  • Android 应用冷启动优化
  • 538页21万字数字政府智慧政务大数据云平台项目建设方案WORD
  • 进程间通信——信号
  • PAT 1039 Course List for Student
  • 【Sklearn】基于决策树算法的数据分类预测(Excel可直接替换数据)
  • 并发编程4:Java 中的并发基础构建模块
  • Vue-10.集成(.editorconfig、.eslintrc.js、.prettierrc)
  • PHP-FPM进程排查
  • PHP-MD5注入
  • 对redis、redisson、springcache总结
  • Java基础知识实际应用(学生信息管理系统、猜拳小游戏、打印日历)
  • Git:在本地电脑上如何使用git?
  • 卷和分区的关系
  • Linux下在qtcreator中创建qt程序
  • 快递再多也不怕!你的顺丰快递用上5G“神器”
  • 微信小程序:模板使用
  • AUTOSAR NvM Block的三种类型
  • Vue+ElementUI实现选择指定行导出Excel
  • SNMP简单介绍
  • 使用python对图像加噪声
  • 以 Java NIO 的角度理解 Netty
  • Maven自定义脚手架(多module模块)+自定义参数