zoukankan      html  css  js  c++  java
  • 有序数切断重组

    将一个升序数组在中间截断成两部分,重新组合成数组,要在数组中找target 返回index,不在数组中返回-1

    主要思想还是二分  

    只是分类讨论的情况比二分的多。

    /**
     * leetcode rotated Array
     * 将一个有序(不妨假设是升序吧)的数组切割后重组,找出目标元素。 变相的二分查找
     * 有两种 1.数组无重复元素 2. 数组有重复的元素
     * 若target不在数组中,则返回-1  时间复杂度lg2n
     * @author admin
     */
    
    
    public static int search(int [] A,int target){
            int len =A.length;
            if(len==0) return -1;
            else if(len==1) return A[0]==target?0:-1;
            int left =0,right=len-1;
            while(left<right){
                int mid = left+(right-left)/2;
                if(target==A[mid]) return mid;
                else if(target ==A[left]) return left;
                else if(target==A[right]) return right;
                //没有切割的情况
                if(A[left]<A[right]&&(target<A[left]||target>A[right])) return -1;
                if(A[left]<A[mid]&&A[mid]>target&&A[left]<mid) {
                    right = mid-1;
                    continue;
                }
                if(A[left]>A[right]&&A[mid]<target&&A[right]>target) {
                    left = mid+1;
                    continue;
                }
                if(A[left]<A[mid]&&A[mid]<target){
                    left = mid+1;
                    continue;
                } 
                if(A[left]>A[mid]){
                    right = mid-1;
                    continue;
                    
                }
                
            }
            
            
            return -1;
            
            
        }
  • 相关阅读:
    Vue.js 2.0更新之增加Virtual DOM讲解
    Json串的单引号和双引号引发的问题解析
    理解javascript中的Function.prototype.bind的方法
    微信小程序开源项目库汇总
    PYTHON.redis_day02
    PYTHON.redis_day01
    PYTHON3.AJAX_day02
    PYTHON3.day01_Ajax
    PYTHON3.django_day08(见pdf)
    PYTHON3.django_day07(见pdf)
  • 原文地址:https://www.cnblogs.com/CongLollipop/p/6636613.html
Copyright © 2011-2022 走看看