zoukankan      html  css  js  c++  java
  • [Swift]lower_bound和upper_bound

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10609164.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    时间复杂度:一次查询O(log n),n为数组长度。

    C++

    lower_bound:返回大于等于val的第一个值

    功能:查找非递减序列[first,last) 内第一个大于或等于某个元素的位置。

    返回值:如果找到返回找到元素的地址否则返回last的地址。注意越界问题。

    upper_bound:返回大于val的第一个值

    功能:查找非递减序列[first,last) 内第一个大于某个元素的位置。

    返回值:如果找到返回找到元素的地址否则返回last的地址。注意越界问题。

    注意:这两个函数只能用于 “非递减序列” 序列。(后一个数可以大于等于前一个数) 


     Swift

    使用二分法进行查找,返回数组中的符合条件的索引值。

    二分法查找(Binary Search):

     1 func binarySearch(_ target:Int) -> Int
     2 {
     3     var low = 0
     4     var high = time.count - 1
     5     var mid = (low + high) >> 1
     6     while low <= high {
     7         let val = time[mid]
     8         if target == val {
     9             return mid
    10         } else if target < val {
    11             high = mid - 1
    12         } else {
    13             low = mid + 1 
    14         }
    15         mid = (low + high) >> 1
    16     }
    17     return high
    18 }

    lower_bound:(包含等于)

     1 func lower_bound(_ target:Int) -> Int
     2     {
     3         var low = 0
     4         var high = arr.count - 1
     5         var mid = (low + high) >> 1
     6         
     7         while low <= high {
     8             let val = arr[mid]
     9             if target == val {
    10                 return mid
    11             } else if target < val {
    12                 high = mid - 1
    13             } else {
    14                 low = mid + 1 
    15             }
    16             mid = (low + high) >> 1
    17         }
    18         return low
    19     }

    upper_bound:(不包含等于)

     1 func upper_bound(_ target:Int) -> Int
     2     {
     3         var low = 0
     4         var high = value.count - 1
     5         var mid = (low + high) >> 1
     6         
     7         while low <= high {
     8             let val = value[mid]
     9             if target == val {
    10                 return mid + 1
    11             } else if target < val {
    12                 high = mid - 1
    13             } else {
    14                 low = mid + 1 
    15             }
    16             mid = (low + high) >> 1
    17         }
    18         return low
    19     }
  • 相关阅读:
    log4j中Spring控制台输出Debug级信息过多解决方法
    spring使用aop
    过滤器(filter)实现用户登录拦截
    Eclipse将项目部署tomcat的webapps目录
    css初始化样例代码
    dede表单修改默认必填
    DedeCMS提交自定义表单加入验证码功能
    jQuery入门第三天
    jQuery入门第二天
    jQuery入门第一天
  • 原文地址:https://www.cnblogs.com/strengthen/p/10609164.html
Copyright © 2011-2022 走看看