zoukankan      html  css  js  c++  java
  • 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));
        }
    }
    
  • 相关阅读:
    HTTP Continuation or nonHTTP traffic 数据包
    linuxTcp IP协议栈源码阅读笔记(转)
    使用Windows命令行启动服务
    数据库集群
    ShellExecute
    oracle 中数据库完全导入导出:cmd命令行模式
    理解ORACLE数据库字符集
    asp.net 编码设置
    ShellExecute与ShellExecuteEx的用法
    C++用位运算实现循环移位
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7442304.html
Copyright © 2011-2022 走看看