zoukankan      html  css  js  c++  java
  • 33. Search in Rotated Sorted Array (JAVA)

    Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

    If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

    The replacement must be in-place and use only constant extra memory.

    Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.

    1,2,3 → 1,3,2
    3,2,1 → 1,2,3
    1,1,5 → 1,5,1

    O(log n) =>想到二分法

    class Solution {
        public int search(int[] nums, int target) {
            return binarySearch(nums,target,0,nums.length-1); 
            
        }
        public int binarySearch(int[] nums, int target, int left, int right){
            if(left > right) return -1; //not found
            
            int mid = left + ((right-left)>>1);
            if(target == nums[mid]) return mid; //found
            
            if(nums[mid] < nums[left]){//rotate in the left part
                if(target < nums[mid] || target >nums[right]){ //target in the left part
                    return binarySearch(nums,target,left,mid-1);
                }
                else{ //target in the right part
                    return binarySearch(nums,target,mid+1,right);
                }
            }
            else if(nums[mid] > nums[right]){ //rotate in the right part
                if(target > nums[mid] || target < nums[left]) {//target in the right part
                    return binarySearch(nums,target,mid+1,right);
                }
                else{//target in the left part
                    return binarySearch(nums,target,left,mid-1);
                }
            }
            else{ //no rotate
                if(target < nums[mid]){
                    return binarySearch(nums,target,left,mid-1);
                }
                else{
                    return binarySearch(nums,target,mid+1,right);
                }
            }
                         
        }
    }
  • 相关阅读:
    程序员学习方法差在哪里
    解析域名
    tomcat下的公共jar包配置
    Ubuntu 16.04 修改状态栏位置
    sqlite3 C语言 API 函数
    vim配置文件
    关于 ioctl 函数
    字符设备基础了解
    Ubuntu14.04搭建Boa服务
    gcc 交叉工具链中工具使用(arm-linux-xxx)
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/10811963.html
Copyright © 2011-2022 走看看