字符串算法——旋转数组中查找目标值(Search in Rotated Sorted Array)

来源:互联网 发布:消费金融用户数据画像 编辑:程序博客网 时间:2024/06/08 01:52

问题:
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.
解决思路:如果不考虑复杂度,可以对数组每个元素进行比较,看是否存在查找的目标值,如果考虑复杂度,可以利用数组原来有序的先验知识,必然数组一边是有序的,一边是无序的,使用二分查找的方法。

class Solution {    public int search(int[] nums, int target) {        int len = nums.length;        if(len==0)return -1;        return dfs(nums,target,0,len-1);    }    private int dfs(int []nums,int target,int min,int max){        if(min>max){            return -1;        }        int mid = (min+max)/2;//中间索引        if(nums[mid] ==target)return mid;        if(nums[mid]>nums[min]){//中间索引左侧是有序的            if(nums[mid]>target && nums[min]<target){//落在索引左侧                return dfs(nums,target,min+1,mid-1);            }            if(nums[min] == target){                return min;            }            return dfs(nums,target,mid+1,max);//落在索引右侧        }else {//索引右侧是有序的            if(nums[mid]<target && nums[max]>target){//落在索引右侧                return dfs(nums,target,mid+1,max-1);            }            if(nums[max] ==target){                return max;            }            return dfs(nums,target,min,mid-1);//落在索引左侧        }    }}
阅读全文
0 0
原创粉丝点击