zoukankan      html  css  js  c++  java
  • Search in Rotated Sorted Array II——LeetCode

    Follow up for "Search in Rotated Sorted Array":
    What if duplicates are allowed?

    Would this affect the run-time complexity? How and why?

    Write a function to determine if a given target is in the array.

    这个题做了好长时间,到最后就这个想法。。。

    后来看到别人真的做出来了,我于是又开始新的征程。。。终于顿悟了。。。

    首先:

    把左右两边的重复元素都过滤了。

    while(lo<hi&&nums[lo]==nums[lo+1])lo++;
    while(lo<hi&&nums[hi]==nums[hi-1])hi--;

    然后开始思考一下rotated sorted array的特点:

    有以下两种情况:

    1 2 3 4 5 6 7 8 完全顺序的

    5 6 7 8 1 2 3 4 反转的

    lo = 0

    hi = len - 1

    mid = (lo+hi)>>>1

    对于完全顺序的不用多说。

    对于翻转的,这时mid会有两种情况:

    一、nums[mid]>nums[hi]

    二、nums[mid]<nums[hi]

    ok,情况说明白了,下面来说target对应的情况:

    如果target比nums[hi]大,那么在前半部分的情况有:

    nums[hi]>nums[mid]或target<nums[mid]

    如果target比nums[hi]小,那么在后部分的情况有:

    target>nums[mid]或者nums[hi]<nums[mid]

         public boolean search(int[] nums,int target){
            if(nums==null||nums.length==0){
                return false;
            }
            int lo = 0, hi = nums.length-1;
            while(lo<=hi){
                while(lo<hi&&nums[lo]==nums[lo+1])lo++;
                while(lo<hi&&nums[hi]==nums[hi-1])hi--;
                
                int mid = (lo+hi)>>>1;
                if(target == nums[mid]){
                    return true;
                }
                if(target>nums[hi]){
                    if(nums[hi]>nums[mid]||target<nums[mid]){
                        hi=mid-1;
                    }else{
                        lo=mid+1;
                    }
                }
                else{
                    if(target>nums[mid]||nums[hi]<nums[mid]){
                        lo=mid+1;
                    }else{
                        hi=mid-1;
                    }
                }
            }
            return false;
        }
  • 相关阅读:
    手把手教你使用markdown
    spring WebSocket详解
    springmvc请求参数异常处理
    蓝桥杯java 算法提高 摆花
    蓝桥杯java 算法提高 扶老奶奶过街
    蓝桥杯java 算法训练 未名湖边的烦恼
    蓝桥杯java 算法训练 Torry的困惑(基本型)
    java算法 硬币
    java算法 牌型种数
    java算法 方格填数
  • 原文地址:https://www.cnblogs.com/aboutblank/p/4817675.html
Copyright © 2011-2022 走看看