Binary Search基础

应用于已排序的数据查找其中特定值,是折半查找最常的应用场景。相比线性查找(Linear Search),其时间复杂度减少到O(lgn)。算法基本框架如下:

   //704. Binary Search
int search(vector<int>& nums, int target) { //nums为已排序数组
int i=,j=nums.size()-;
while(i<=j){
int mid=(i+j)/;
if(nums[mid]==target) return mid;
else if(nums[mid]>target) j=mid-;
else i=mid+;
}
return -;
}

以上查找范围的上下限 i 和 j 代表索引,算法过程可视化:Binary Search,STL中有序区间函数upper_bound/lower_bound内用的查找方法即是折半查找。

相关LeetCode题:

704. Binary Search  题解

34. Find First and Last Position of Element in Sorted Array  题解

33. Search in Rotated Sorted Array  题解

按值范围折半查找

折半查找还可以应用于非有序区间查找满足特定条件的值。该场景下所找的值在已知范围内,这时折半的不是索引,而是值本身所在的范围。算法基本框架如下:
    //287. Find the Duplicate Number
int findDuplicate(vector<int>& nums) {
int n=nums.size();
int i=,j=n-; //[i,j]表示值的区间
while(i<=j){
int mid=(i+j)/,count=;
for(auto k:nums)
if(k<=mid) ++count;
//根据计数折半缩小区间if(count<=mid) i=mid+;
else j=mid-;
}
return i; //最终返回值本身
}

相关LeetCode题:

378. Kth Smallest Element in a Sorted Matrix  题解

875. Koko Eating Bananas  题解

1011. Capacity To Ship Packages Within D Days  题解

410. Split Array Largest Sum  题解

折半查找求递增序列

求递增序列(LIS, longest increasing subsequence)是一道经典的算法题目,用折半查找对其进行求解的方法十分巧妙,求解代码如下:

    //300. Longest Increasing Subsequence
int lengthOfLIS(vector<int>& nums) {
int size=;
vector<int> tail(nums.size()); //候选递增序列集for(auto num:nums){
int i=,j=size;
while(i<j){
int mid=(i+j)/;
if(tail[mid]<num) i=mid+;
else j=mid;
}
tail[i]=num;
if(i==size) size++;
}
return size;
}

以上设定LIS候选序列集 tail,对无序区间 nums 中的各个值通过折半查找的方法,找到其落在 tail 的位置,最终最长的序列长度即为所求。详细算法过程说明见 这里 这里

LeetCode编程训练 - 折半查找(Binary Search)的更多相关文章

  1. 算法与数据结构基础 - 折半查找(Binary Search)

    Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...

  2. LeetCode编程训练 - 合并查找(Union Find)

    Union Find算法基础 Union Find算法用于处理集合的合并和查询问题,其定义了两个用于并查集的操作: Find: 确定元素属于哪一个子集,或判断两个元素是否属于同一子集 Union: 将 ...

  3. LeetCode:Convert Sorted Array to Binary Search Tree,Convert Sorted List to Binary Search Tree

    LeetCode:Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in asce ...

  4. STL之二分查找 (Binary search in STL)

    STL之二分查找 (Binary search in STL) Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound ...

  5. LeetCode 704. 二分查找(Binary Search)

    704. 二分查找 704. Binary Search 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果 ...

  6. Leetcode 编程训练

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...

  7. Leetcode 编程训练(转载)

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...

  8. [LeetCode] Convert Sorted List to Binary Search Tree 将有序链表转为二叉搜索树

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  9. [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 这道 ...

随机推荐

  1. python获取设备主机名和IP地址

    import socket def print_machine_info(): host_name = socket.gethostname() ip_address = socket.gethost ...

  2. 写一个python脚本监控在linux中的进程

    在虚拟机中安装Linux中的CentOS7系统 https://baijiahao.baidu.com/s?id=1597320700700593557&wfr=spider&for= ...

  3. LeetCode 9. Palindrome Number(c语言版)

    题目: Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...

  4. SQL语句完整的执行顺序(02)

    这是对SQL语句完整的执行顺序(01)的补充: 数据库是mysql,使用的数据库表名称是my_student. 表的完整数据信息是: 完整语法是: Select [select选项] 字段列表[字段别 ...

  5. Django报错:OSError: raw write() returned invalid length 4 (should have been between 0 and 2)

    在使用Django时Django报错:Django报错:OSError: raw write() returned invalid length 4 (should have been between ...

  6. SpringBoot jar 注册windows服务

    1.pom.xml中添加 <plugin> <groupId>cn.joylau.code</groupId> <artifactId>joylau-s ...

  7. Angular Taskmgr 登录

    一.登录module 1.先创建domain文件夹,在里面建一个user.model.ts的user领域对象. export interface User{ id?:string; email:str ...

  8. react-native自定义TextInput光标颜色

    <TextInput defaultValue="Highlight Color is red" selectionColor={'red'} style={styles.s ...

  9. 2018年多校第三场第一题 A. Ascending Rating hdu6319

    比赛地址:http://acm.hdu.edu.cn/contests/contest_show.php?cid=804 题目编号:第一题 A. Ascending Rating  hdu6319 题 ...

  10. ISP PIPLINE (十一) color correction

    什么是color correction? 为什么要进行color correction? 转换后的色彩饱和度更加明显,更加符合人眼感官. 如何进行color correction? 下图是步骤: 第一 ...