算法:Search in Rotated Sorted Array(搜索部分顺序被翻转的数组)
说明
算法:Search in Rotated Sorted Array
地址:https://leetcode.com/problems/search-in-rotated-sorted-array/
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
Your algorithm’s runtime complexity must be in the order of O(log n).
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Example 2:
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
解题思路
注意:要用二分查找。既然有部分数组被翻转了,找到被翻转的数据(叫做divideIndex),就可以确定target在哪个部分,用二分查找即可。
比如 Example 1: [4,5,6,7,0,1,2],
- 找到分割的数据0,index = 4;
判断 nums[index] 刚好等于 0, 直接return index.
如果不等于,比如Example 3, target = 3, 跟nums[lastIndex]比较。 - 发现3 > 2, 所以,数据在范围[0, divideIndex - 1]区间查找.
- 最后如果小于,发现3 < ?, 数据在范围[divideIndex + 1, lastIndex] 中查找。
注意:要考虑到边界的问题,比如数组是空的情况,直接返回-1.
代码如下:
public int search(int[] nums, int target) {// check edgeif (nums == null || nums.length == 0) {return -1;}// find the divide indexint divideIndex = findDividIndex(nums);if (target == nums[divideIndex]) {return divideIndex;}int lastIndex = nums.length - 1;int beginIndex = target > nums[lastIndex] ? 0 : divideIndex;int endIndex = target > nums[lastIndex] ? divideIndex : lastIndex;while (beginIndex <= endIndex) {int midIndex = beginIndex + ((endIndex - beginIndex) >> 1);if (target == nums[midIndex]) {return midIndex;} else if (target > nums[midIndex]) {beginIndex = midIndex + 1;} else {endIndex = midIndex - 1;}}return -1;}private int findDividIndex(int[] nums) {int from = 0;int to = nums.length - 1;while (from < to) {int mid = from + ((to - from) >> 1);if (nums[mid] > nums[to]) {from = mid + 1;} else {to = mid;}}return from;}
代码下载:
https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/binarysearch/SearchInRotatedSortedArray.java
算法:Search in Rotated Sorted Array(搜索部分顺序被翻转的数组)相关推荐
- python旋转排序数组_LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现...
题目描述: python实现Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2, ...
- LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- [算法题] Search in Rotated Sorted Array ii
题目内容 题目来源:LeetCode Suppose an array sorted in ascending order is rotated at some pivot unknown to yo ...
- 81. Search in Rotated Sorted Array II
题目: Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would ...
- 【leetcode】Search in Rotated Sorted Array II(middle)☆
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- LeetCode Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...
- 62. Search in Rotated Sorted Array【medium】
62. Search in Rotated Sorted Array[medium] Suppose a sorted array is rotated at some pivot unknown t ...
- leetcode 81 Search in Rotated Sorted Array II ----- java
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
最新文章
- IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)...
- linux磁盘空间不足,但是使用df却发现磁盘空间至少有一半的空间没有使用
- 支持向量机SVM算法原理
- IOS和Android音频开发总结
- 通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现
- LoadRunner 使用虚拟IP测试流程
- grdraw用法 lisp_AutoCAD 2000 Visual LISP开发
- delphi报列表索引越界怎么处理_深入了解散列表
- hadoop学习使用
- SQL Server 数据库之连接查询
- java 句柄无效_c# – 通过java运行.net控制台时“句柄无效”
- 阿里云Docker仓库
- 电脑蓝屏怎么解决0x0000007b,解决电脑蓝屏问题
- 使用微PE工具箱安装Win10系统步骤
- PCL库学习笔记——使用变换矩阵变换点云
- MongoDB系列六(聚合).
- Ubuntu 10.10安装配置指南Ubuntu 11.10 图形安装教程
- 超微服务器主板bios装系统,超微主板phoenixbios设置方法
- 有哪些性价比高的照明品牌?性价比最高的灯具品牌
- 程序员狂怒:薪水被应届生倒挂了,很不爽,天王老子也别想留住我!