zoukankan      html  css  js  c++  java
  • Day 46

    第33题:

    假设按照升序排序的数组在预先未知的某个点上进行了旋转。

    ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

    搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

    你可以假设数组中不存在重复的元素。

    你的算法时间复杂度必须是 O(log n) 级别。来源:力扣(LeetCode)

     

    1、由于时间复杂度只能是log(n),所以使用二分法;

      由于数组被旋转了,所以其中并不是升序排序的;

      但是也可以和二分法一样,数组分成两部分,其中肯定有一部分是升序的,然后在升序的那部分判断target是否可能存在这一部分;

      可能的话就在这一部分进行下一步二分,如果不能就在另一部分进行下一步二分;

      最终得出结果。

      

     第34题:

    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

    你的算法时间复杂度必须是 O(log n) 级别。

    如果数组中不存在目标值,返回 [-1, -1]。来源:力扣(LeetCode)

     1、可以先求出target的开始位置,因为nums是升序的,所以我们再求target+1的开始位置;

      如果nums中不包含target+1,它的下标也会是target的结束位置+1;

      所以只需要求到这两个值就可以得出target的开始和结束位置。

      

    2、或者二分查找target,然后从nums内的这个数的下标开始取寻找它的开始位置和结束位置,分别用二分查找来实现。

      寻找开始位置first                      寻找结束位置last

      

       得到了开始位置和结束位置后就返回结果。

  • 相关阅读:
    getComputedStyle方法获取元素CSS值
    js获得当前元素的样式
    移动端 Retina屏border实现0.5px
    CFA
    LCD驱动
    EPD的驱动
    camera原理
    Perl实战(一)
    Perl的debug小技巧
    Bus memory attribute
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13520796.html
Copyright © 2011-2022 走看看