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     }
  • 相关阅读:
    保险
    cron表达式的用法
    Hive 学习记录
    股票的五种估值方法
    AtCoder Beginner Contest 113 A
    ZOJ 4070 Function and Function
    银行业务队列简单模拟 (数据结构题目)
    算法3-7:银行排队
    算法3-5:n阶Hanoi塔问题
    算法3-1:八进制数
  • 原文地址:https://www.cnblogs.com/strengthen/p/10609164.html
Copyright © 2011-2022 走看看