二分查找(通过相对位置判断区间位置)--17--二分--LeetCode33搜索旋转排序数组
2021-02-06 00:15
标签:数组 arch 存在 -- log solution 它的 二分查找 复杂度 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 二分查找(通过相对位置判断区间位置)--17--二分--LeetCode33搜索旋转排序数组 标签:数组 arch 存在 -- log solution 它的 二分查找 复杂度 原文地址:https://www.cnblogs.com/qinqin-me/p/12785929.html搜索旋转排序数组
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例 1:
输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1 1 class Solution {
2 public int search(int[] nums, int target) {
3 int left = 0;//左边界
4 int right = nums.length - 1;//右边界
5 int mid;
6 while(left right){
7 mid = (left + right) / 2;
8 if(nums[mid] target){
9 if(nums[left] //位置分布:left mid target | right
10 left = mid + 1;
11 else{
12 if(target //位置分布:left | mid target right
13 left = mid + 1;15
14 else if(nums[right] //位置分布:left target | mid right
16 right = mid - 1;18
17 else
19 return right;
20 }
21 }
22 else if(target nums[mid]){
23 if(nums[left] //位置分布:left target mid | right
24 right = mid - 1;
25 else if(nums[left] > target){
26 if(nums[mid] //位置分布:left | target mid right
27 right = mid - 1;29
28 else//位置分布:left mid | target right
30 left = mid + 1;32 }
33 else
34 return left;
35 }
36 else
37 return mid;
38 }
39 return -1;
40 }
41 }
上一篇:java面试题(自用)
下一篇:详解反向传播算法(小白版)
文章标题:二分查找(通过相对位置判断区间位置)--17--二分--LeetCode33搜索旋转排序数组
文章链接:http://soscw.com/index.php/essay/51559.html