• [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 

  • 相关阅读:
    selenium使用
    爬取梨视频
    django实现事务
    django admin模块使用
    跨域问题和django中实现跨域
    Java多线程Condition定点通知
    Java创建线程四种方式
    JVM之JVM体系结构
    Java线程状态
    Java正则表达式解析网页源码
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10597821.html
Copyright © 2020-2023  润新知