博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] Search in Rotated Sorted Array
阅读量:6263 次
发布时间:2019-06-22

本文共 1710 字,大约阅读时间需要 5 分钟。

hot3.png

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e.,0 1 2 4 5 6 7might 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.

思路:使用二分查找,若中间数大于等于最左端数,那左半部分必定有序,否则右半部分有序,通过将目标数与有序部分的最大与最小数比较来判断目标数位于哪一部分。复杂度O(logn)。

注意:此题边界情况,>,>=等需仔细考虑斟酌。

/** * http://blog.csdn.net/linhuanmars/article/details/20525681 * @author jd * */public class Solution {    public int search(int[] A, int target) {        if (A == null || A.length == 0)            return -1;        int l = 0, r = A.length - 1, mid;        while (l <= r) {            mid = (l + r) / 2;            if (A[mid] == target)                return mid;            else if (A[l] <= A[mid]) {                if (A[l] <= target && target < A[mid])                    r = mid - 1;                else                    l = mid + 1;            } else {                if (A[mid] < target && target <= A[r])                    l = mid + 1;                else                    r = mid - 1;            }        }        return -1;    }    public static void main(String[] args) {        System.out.println(new Solution().search(new int[] { 3,1 }, 1));        System.out.println(new Solution().search(new int[] { 1, 2, 3, 4, 5 }, 3));        System.out.println(new Solution().search(new int[] { 2, 3, 4, 1, 2 }, 3));        System.out.println(new Solution().search(new int[] { 2, 3, 4, 1, 2 }, 1));        System.out.println(new Solution().search(new int[] { 4, 5, 1, 2, 3 }, 5));        System.out.println(new Solution().search(new int[] { 4, 5, 1, 2, 3 }, 3));    }}

参考:

转载于:https://my.oschina.net/jdflyfly/blog/284222

你可能感兴趣的文章
Sql中的Exists和in
查看>>
如何修改Entity Framework Db Frist模式下的Entity继承关系?
查看>>
redis实现区间查询
查看>>
azkaban使用
查看>>
ajax请求的异步嵌套问题分析
查看>>
CSS样式学习笔记『W3School』
查看>>
maven热部署
查看>>
HTTP协议 请求篇
查看>>
redis的订阅和发布
查看>>
直接插入排序法
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
35.使用拦截器实现权限验证
查看>>
嵌套类&内部类
查看>>
POJ 3468 线段树 成段更新 懒惰标记
查看>>
关于SQLServer2008数据如何导入SQL2005的解决办法,高版本数据导入低版本中。
查看>>
双重分页2
查看>>
Java面向对象的三个特征与含义
查看>>
tkinter 创建登陆注册界面
查看>>
linux常用命令
查看>>
决策树-流水线
查看>>