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;
            
            
        }
  • 相关阅读:
    bzoj 1217: [HNOI2003]消防局的设立
    [USACO09FEB]庙会班车Fair Shuttle
    bzoj 1052: [HAOI2007]覆盖问题
    bzoj 1974: [Sdoi2010]代码拍卖会
    bzoj 1835: [ZJOI2010]基站选址
    bzoj 1875: [SDOI2009]HH去散步
    bzoj 3295: [Cqoi2011]动态逆序对
    bzoj 2120: 数颜色
    P1032 字串变换
    简析拓扑排序
  • 原文地址:https://www.cnblogs.com/CongLollipop/p/6636613.html
Copyright © 2011-2022 走看看