leetcode 33 Search in Rotated Sorted Array

mac2022-06-30  23

问题描述

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 become4 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.

问题分析

一个升序的数组会头尾连接然后单方向移动,相当于一个环,nums代表其中的一种状态,我们需要找到目标元素。

算法描述

对于查找算法我这里使用二分查找,先利用二分查找找到最小值所在位置,即原始数组头所在位置,然后再利用二分查找进行查找target,过程中真实的mid位置需要利用得到的最小值所在位置进行一下变换。最终找到target,否则返回-1;

时间复杂度为O(logN)

java实现

/** * @Author: LiuYafei * @Date: 2017/10/31 * @Time: 16:30 * @Description: */ public class SearchinRotatedSortedArray { public static int search(int[] nums, int target) { if(nums.length == 0 || nums == null){ return -1; } if(nums.length == 1) { if(nums[0] == target) { return 0; }else { return -1; } } int a = 0; int b = nums.length-1; while (a<b) { int mid = (a + b) / 2; if(nums[mid] > nums[b]) { a = mid + 1; } else { b = mid; } } int max = a;//a = b就是最小的数的下标 a = 0; b = nums.length - 1; while (a <= b) { int mid = (a + b) / 2; int realmid = (mid + max) % nums.length; if(nums[realmid] == target) return realmid; if(nums[realmid] < target) { a = mid + 1; } else { b = mid - 1; } } return -1; } public static void main(String [] args) { int[] nums = {1,3}; int target = 3; System.out.println(SearchinRotatedSortedArray.search(nums, target)); } }

转载于:https://www.cnblogs.com/lyf722/p/7762609.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)