zoukankan      html  css  js  c++  java
  • [Algorithm] Search element in a circular sorted array

    function findInCircularlySortedAry (ary = [], target) {
      if (ary && ary.length === 0) {
        return -1;
      }
      
      if (ary.length === 1) {
          return ary[0] === target ? 0 : -1;
      }
      
      let low = 0,
          high = ary.length - 1;
      
      while(low <= high) {
        let mid = Math.floor((low + high) / 2);
        // case 1: target === middle item, return found
        if (ary[mid] === target) {
           return mid;
        }
        // To find which parts (left or right) is sorted
        // case 2: if middle < high, mean from middle to high is sorted
        if (ary[mid] < ary[high]) {
           if (target > ary[mid] && target <= ary[high]) {
               low = mid + 1;
           } else {
             high = mid - 1;
           }
        } 
        // case 3: if low < middle, mean from low to middle is sorted
        else {
          if (target >= ary[low] && target < ary[mid]) {
            high = mid -1;
          } else {
            low = mid + 1;
          }
        } 
      }
      
      return -1;
    }
    
    
    const data = [12,14,18,21,3,6,8,9];
    const res = findInCircularlySortedAry(data,18); // 2
    console.log(res);

    We don't need to 

  • 相关阅读:
    Aspect Oriented Programming
    jsp01
    监听器
    Java编写验证码
    servlet07
    MySQL02
    MySQL01
    Java的jdk1.6与jre1.8中存在的差异
    登陆验证和二级联动
    ajax和json
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10597821.html
Copyright © 2011-2022 走看看