• 33.search in rotated sorted array leetcode java


    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.

    博主表示看题看了很久之后,找规律喽~ debug N久之后总算得到的正确的结果把自己都绕晕了~~

    这是一道binary search的变体,总有一边是有序的~~

    package leetcode2;
    
    public class Search_in_Rotated {
       public static int search(int[] A, int target) {
            int location;      
            location=binarysearch(A,target,0,A.length-1);
            return location;
            
        }
       public static int binarysearch(int[] A, int target,int left,int right) {
          int mid=(int)(left+right)/2;
          if(A[mid]==target){
              return mid;
          }
          if(left<=right){
          if(target>A[mid]){
              if(A[mid]<A[right] && target<=A[right]){
                  return binarysearch(A,target,mid+1,right); // 一定注意!!(mid+1,right)
              }else if(A[mid]>A[left]){
                  return binarysearch(A,target,mid+1,right);  // (mid+1,right)
              }else{
                  return binarysearch(A,target,left,mid-1);  //(left,mid-1)!!!
              }
          }
          if(target<A[mid]){
              if(A[mid]>A[left] && target>=A[left]){
                  return binarysearch(A,target,left,mid-1);
              }else if(A[mid]<A[right]){
                  return binarysearch(A,target,left,mid-1);
              }else{
                  return binarysearch(A,target,mid+1,right);
              } 
          }
          }
          return -1;
       }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
          int[] a={2,3,4,5,7,0,1};
          System.out.println(search(a, 4));
        }
    
    }

    然后看了看别人的代码,博主表示自己真是too young too naive!!其实自己是在练习迭代是吧orz!QAQ

    int rotated_binary_search(int A[], int N, int key) {
      int L = 0;
      int R = N - 1;
     
      while (L <= R) {
        // Avoid overflow, same as M=(L+R)/2
        int M = L + ((R - L) / 2);
        if (A[M] == key) return M;
     
        // the bottom half is sorted
        if (A[L] <= A[M]) {
          if (A[L] <= key && key < A[M])
            R = M - 1;
          else
            L = M + 1;
        }
        // the upper half is sorted
        else {
          if (A[M] < key && key <= A[R])
            L = M + 1;
          else 
            R = M - 1;
        }
      }
      return -1;
    }
  • 相关阅读:
    MVC模式和三层架构的区别
    浅谈MVC3自定义分页
    Jquery进度条插件 Progress Bar
    浅谈 MVC3 WebMail 发送邮件
    LINQ orderby 排序妙用
    mvc3 razor视图下 显示字符串形式的html
    Asp.Net MVC3 让你疯狂的5个理由
    4月8日作业 代码审核复查
    几个js处理时间函数
    看看下面JavaScript代码输出什么?
  • 原文地址:https://www.cnblogs.com/joannacode/p/4390202.html
Copyright © 2020-2023  润新知