leetcode — search-in-rotated-sorted-array

/**
 * Source : https://oj.leetcode.com/problems/search-in-rotated-sorted-array/
 *
 * Created by lverpeng on 2017/7/13.
 *
 * Suppose a sorted array 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.
 *
 */
public class SearchInRotatedSortedArray {


    /**
     * 有序数组以某一个支点被翻转过,在数组中查找某一个元素
     *
     * 数组是局部有序的,使用二分查找的过程中使用这个特点
     *
     * @param num
     * @return
     */
    public int search (int[] num, int target) {
        int left = 0;
        int right = num.length - 1;
        int mid = 0;
        while (left <= right) {
            mid = (left + right) / 2;
            if (num[mid] == target) {
                return mid;
            }
            // left- mid之间是局部有序的
            if (num[left] <= num[mid]) {
                if (num[left] <= target && target < num[mid]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            } else {
                // mid - right是有序的
                if (mid < target && target <= num[right]) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
        }
        return -1;
    }


    public static void main(String[] args) {
        SearchInRotatedSortedArray searchInRotatedSortedArray = new SearchInRotatedSortedArray();
        int[] arr = new int[]{4, 5, 6, 7, 0, 1, 2};
        System.out.println(searchInRotatedSortedArray.search(arr, 0));
        System.out.println(searchInRotatedSortedArray.search(arr, 5));
        System.out.println(searchInRotatedSortedArray.search(arr, 7));
    }
}

转载于:https://www.cnblogs.com/sunshine-2015/p/7442304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值