二分查找,你真的掌握了吗?

2023-05-16

版权所有,转载请注明出处,谢谢!
http://blog.csdn.net/walkinginthewind/article/details/8937978

二分查找,最基本的算法之一,也是面试中常被考察的重点,因为基本的算法最能反映出一个人的基础是否扎实。本文对二分查找相关题目做一个总结。

题目列表:

1. 给定一个有序(非降序)数组A,求任意一个i使得A[i]等于target,不存在则返回-1
2. 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1
3. 给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]等于target,不存在则返回-1
4. 给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]小于target,不存在则返回-1
5. 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]大于target,不存在则返回-1
6. 给定一个有序(非降序)数组A,可含有重复元素,求target在数组中出现的次数。
7. 给定一个有序(非降序)数组A,若target在数组中出现,返回位置,若不存在,返回它应该插入的位置。
8. 给定一个有序(非降序)数组A,可含有重复元素,求绝对值最小的元素的位置
9. 给定一个有序(非降序)数组A和一个有序(非降序)数组B,可含有重复元素,求两个数组合并结果中的第k(k>=0)个数字。
10. 一个有序(升序)数组,没有重复元素,在某一个位置发生了旋转后,求target在变化后的数组中出现的位置,不存在则返回-1.
11. 一个有序(升序)数组,没有重复元素,在某一个位置发生了旋转后,求最小值所在位置
12. 一个有序(升序)数组,没有重复元素,在某一个位置发生了旋转后,求第k(k > 0)小元素

1. 给定一个有序(非降序)数组A,求任意一个i使得A[i]等于target,不存在则返回-1
这个是最原始的二分查找题目,利用数组的有序特性,拆半查找,使得查找时间复杂度为O(logN)。请参考实现代码与注释。

int search(int A[], int n, int target)
{
	int low = 0, high = n-1;
	while(low <= high)
	{
		// 注意:若使用(low+high)/2求中间位置容易溢出
		int mid = low+((high-low)>>1); 
		if(A[mid] == target)
			return mid;
		else if(A[mid] < target)
			low = mid+1;
		else // A[mid] > target
			high = mid-1;
	}
	return -1;
}
2. 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1
此题也就是求target在数组中第一次出现的位置。这里可能会有人想先直接用原始的二分查找,如果不存在直接返回-1,如果存在,然后再顺序找到这个等于target值区间的最左位置,这样的话,最坏情况下的复杂度就是O(n)了,没有完全发挥出二分查找的优势。这里的解法具体过程请参考实现代码与注释。

int searchFirstPos(int A[], int n, int target)
{
	if(n <= 0) return -1;
	int low = 0, high = n-1;
	while(low < high)
	{
		int mid = low+((high-low)>>1);
		if(A[mid] < target)
			low = mid+1;
		else // A[mid] >= target
			high = mid;
	}
	/* 
	循环过程中,当low大于0时,A[low-1]是小于target的,因为A[mid] < target时,
	low=mid+1;当high小于n-1时,A[high]是大于等于target的,因为A[mid] >= target时,
	high = mid;循环结束时,low 等于 high,所以,如果A[low](A[high])等于target,
	那么low(high)就是target出现的最小位置,否则target在数组中不存在。
	*/
	if(A[low] != target)
		return -1;
	else
		return low;
}

3. 给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]等于target,不存在则返回-1

此题也就是求target在数组中最后一次出现的位置。与上一题基本一样,但是有个地方要注意,具体请参考实现代码与注释。

int searchLastPos(int A[], int n, int target)
{	
	if(n <= 0) return -1;
	int low = 0, high = n-1;
	while(low < high)
	{
		/*
		这里中间位置的计算就不能用low+((high-low)>>1)了,因为当low+1等于high
		且A[low] <= target时,会死循环;所以这里要使用low+((high-low+1)>>1),
		这样能够保证循环会正常结束。
		*/
		int mid = low+((high-low+1)>>1);
		if(A[mid] > target)
			high = mid-1;
		else // A[mid] <= target
			low = mid;
	}
	/* 
	循环过程中,当high小于n-1时,A[high+1]是大于target的,因为A[mid] > target时,
	high=mid-1;当low大于0时,A[low]是小于等于target的,因为A[mid] <= target时,
	low = mid;循环结束时,low 等于 high,所以,如果A[high](A[low])等于target,
	那么high(low)就是target出现的最大位置,否则target在数组中不存在。
	*/
	if(A[high] != target)
		return -1;
	else
		return high;
}

4. 给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]小于target,不存在则返回-1。

也就是求小于target的最大元素的位置。请参考实现代码与注释。

int searchLastPosLessThan(int A[], int n, int target)
{
	if(n <= 0) return -1;
	int low = 0, high = n-1;
	while(low < high)
	{
		int mid = low+((high-low+1)>>1); // 注意,不要导致死循环
		if(A[mid] < target)
			low = mid;
		else // A[mid] >= target
			high = mid-1;
	}
	/* 
	循环过程中,当low大于0时,A[low]是小于target的,因为A[mid] < target时,
	low=mid;当high小于n-1时,A[high+1]是大于等于target的,因为A[mid] >= target时,
	high = mid-1;循环结束时,low 等于 high,所以,如果A[low](A[high])小于target,
	那么low(high)就是要找的位置,否则不存在这样的位置(A[0] >= target时)。
	*/
	return A[low] < target ? low : -1;
}
5. 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]大于target,不存在则返回-1。
也就是求大于target的最小元素的位置。请参考实现代码与注释。

int searchFirstPosGreaterThan(int A[], int n, int target)
{
	if(n <= 0) return -1;
	int low = 0, high = n-1;
	while(low < high)
	{
		int mid = low+((high-low)>>1);
		if(A[mid] > target)
			high = mid;
		else // A[mid] <= target
			low = mid+1;
	}
	/* 
	循环过程中,当low大于0时,A[low-1]是小于等于target的,因为A[mid] <= target时,
	low=mid+1;当high小于n-1时,A[high]是大于target的,因为A[mid] > target时,
	high = mid;循环结束时,low 等于 high,所以,如果A[high](A[low])大于target,
	那么high(low)就是要找的位置,否则不存在这样的位置(A[n-1] <= target时)。
	*/
	return A[high] > target ? high : -1;
}

6. 给定一个有序(非降序)数组A,可含有重复元素,求target在数组中出现的次数

求出第一次出现位置和最后一次出现位置。由于前面都已实现,这里不多解释。请参考实现代码与注释

int count(int A[], int n, int target)
{
	int firstPos = searchFirstPos(A, n, target); // 第一次出现位置
	if(firstPos == -1)
		return 0;
	int lastPos = searchLastPos(A, n, target);  // 最后一次出现位置
	return lastPos-firstPos+1;  // 出现次数
}

此题描述或者改为求目标值在数组中的索引范围。

7. 给定一个有序(非降序)数组A,若target在数组中出现,返回位置,若不存在,返回它应该插入的位置

如    [1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

int searchInsert(int A[], int n, int target) {
	// 如果比最大值还大,那插入位置就是位置n
	if(A[n-1] < target) 
		return n;
	int low = 0, high = n-1;
	while(low < high)
	{
		int mid = low+((high-low)>>1);
		if(A[mid] >= target)
			high = mid;
		else // A[mid] < target
			low = mid+1;
	}
	/*  
	循环过程中,当low大于0时,A[low-1]是小于target的,因为A[mid] < target时, 
	low=mid+1;当high小于n-1时,A[high]是大于等于target的,因为A[mid] >= target时, 
	high = mid;循环结束时,low 等于 high,所以,如果A[low](A[high])等于target, 
	那么low(high)就是target出现的位置,否则low就是target在数组中应该插入的位置。 
	*/
	return high;
}

8. 给定一个有序(非降序)数组A,可含有重复元素,求绝对值最小的元素的位置

找第一个大于等于0的位置,然后和前一个元素的绝对值比较,返回绝对值较小的元素的位置。请参考实现代码与注释

int searchMinAbs(int A[], int n)
{
	int low = 0, high = n-1;
	while(low < high)
	{
		int mid = low+((high-low)>>1);
		if(A[mid] < 0)
			low = mid+1;
		else // A[mid] >= 0
			high = mid;
	}
	/* 循环结束时,如果low != n-1,A[low] >= 0,如果low>0,A[low-1] < 0 */
	if(low > 0 && abs(A[low-1]) < abs(A[low]))
		return low-1;
	else
		return low;
}

9. 给定一个有序(非降序)数组A和一个有序(非降序)数组B,可含有重复元素,求两个数组合并结果中的第k(k>=0)个数字。

这个题目出现了两个数组,有序的,不管怎样我们就应该首先考虑二分查找是否可行。若使用顺序查找,时间复杂度最低为O(k),就是类似归并排序中的归并过程。使用用二分查找时间复杂度为O(logM+logN)。二分查找的具体实现过程请参考实现代码与注释。

int findKthIn2SortedArrays(int A[], int m, int B[], int n, int k)
{
	if(m <= 0) // 数组A中没有元素,直接在B中找第k个元素
		return B[k];
	if(n <= 0) // 数组B中没有元素,直接在A中找第k个元素
		return A[k];
	int i = (m-1)>>1; // 数组A的中间位置
	int j = (n-1)>>1; // 数组B的中间位置
	if(A[i] <= B[j])  // 数组A的中间元素小于等于数组B的中间元素
	{
		/*
		设x为数组A和数组B中小于B[j]的元素数目,则i+1+j+1小于等于x,
		因为A[i+1]到A[m-1]中还可能存在小于等于B[j]的元素;
		如果k小于i+1+j+1,那么要查找的第k个元素肯定小于等于B[j],
		因为x大于等于i+1+j+1;既然第k个元素小于等于B[j],那么只
		需要在A[0]~A[m-1]和B[0]~B[j]中查找第k个元素即可,递归调用下去。
		*/
		if(k < i+1+j+1)
		{
			if(j > 0)
				return findKthIn2SortedArrays(A, m, B, j+1, k);
			else // j == 0时特殊处理,防止死循环
			{
				if(k == 0)
					return min(A[0], B[0]);
				if(k == m)
					return max(A[m-1], B[0]);
				return A[k] < B[0] ? A[k] : max(A[k-1], B[0]);
			}
		}
		/*
		设y为数组A和数组B中小于于等于A[i]的元素数目,则i+1+j+1大于等于y;
		如果k大于等于i+1+j+1,那么要查找到第k个元素肯定大于A[i],因为
		i+1+j+1大于等于y;既然第k个元素大于A[i],那么只需要在A[i+1]~A[m-1]
		和B[0]~B[n-1]中查找第k-i-1个元素,递归调用下去。
		*/
		else
			return findKthIn2SortedArrays(A+i+1, m-i-1, B, n, k-i-1);
	} 
	// 如果数组A的中间元素大于数组B的中间元素,那么交换数组A和B,重新调用即可
	else
		return findKthIn2SortedArrays(B, n, A, m, k);
}

10. 一个有序(升序)数组,没有重复元素,在某一个位置发生了旋转后,求target在变化后的数组中出现的位置,不存在则返回-1

 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2

我们先比较中间元素是否是目标值,如果是返回位置。如果不是,我们就应该想办法将搜索区间减少一半。因为存在旋转变化,所以我们要多做一些判断。我们知道因为只有一次旋转变化,所以中间元素两边的子数组肯定有一个是有序的,那么我们可以判断target是不是在这个有序的子数组中,从而决定是搜索这个子数组还是搜索另一个子数组。具体请参考实现代码与注释。

int searchInRotatedArray(int A[], int n, int target) 
{
	int low = 0, high = n-1;
	while(low <= high)
	{
		int mid = low+((high-low)>>1);
		if(A[mid] == target) 
			return mid;
		if(A[mid] >= A[low]) 
		{
			// low ~ mid 是升序的
			if(target >= A[low] && target < A[mid])
				high = mid-1;
			else
				low = mid+1;
		}
		else
		{
			// mid ~ high 是升序的
			if(target > A[mid] && target <= A[high])
				low = mid+1;
			else
				high = mid-1;
		}
	}
	return -1;
}

如果这样的数组中存在重复元素,还能使用二分吗?答案是不能。请看几个例子

[1, 2, 2, 2, 2], [2, 1, 2, 2, 2], [2, 2, 1, 2, 2], [2, 2, 2, 1, 2], [2, 2, 2, 2, 1]这些都是有第一个数组旋转一次变化来的,我们不能通过二分确定是否存在元素1.

11. 一个有序(升序)数组,没有重复元素,在某一个位置发生了旋转后,求最小值所在位置

如果中间元素小于左端元素,则最小值在左半区间内(包含中间元素);如果中间元素大于右端元素,则最小值在右半区间内(包含中间元素)。请参考实现代码与注释。

int searchMinInRotatedArray(int A[], int n) 
{
	if(n == 1)
		return 0;
	int low = 0, high = n-1;
	while(low < high-1) // 保证mid != low且mid != high
	{
		int mid = low+((high-low)>>1);
		if(A[mid] < A[low]) // 最小值在low~mid
			high = mid;
		else // A[mid] > A[low], // 最小值在mid和high之间
			low = mid;
	}
	return A[low] < A[low+1] ? low : low+1;
}
12. 一个有序(升序)数组,没有重复元素,在某一个位置发生了旋转后,求第k(k > 0)小元素的位置
我们可以利用上一题的解答,求出最小值所在位置后,便可以求出第k小元素。请参考实现代码与注释

int searchKthInRotatedArray(int A[], int n, int k) 
{
	int posMin = searchMinInRotatedArray(A, n);
	return (posMin+k-1)%n;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二分查找,你真的掌握了吗? 的相关文章

  • Leetcode---面试题 08.03. 魔术索引---每日一题---二分查找

    面试题 08 03 魔术索引 魔术索引 在数组A 0 n 1 中 xff0c 有所谓的魔术索引 xff0c 满足条件A i 61 i 给定一个有序整数数组 xff0c 编写一种方法找出魔术索引 xff0c 若有的话 xff0c 在数组A中找
  • 数据结构实验之查找四:二分查找

    数据结构实验之查找四 xff1a 二分查找 Time Limit 30 ms Memory Limit 65536 KiB Submit Statistic Discuss Problem Description 在一个给定的无重复元素的递
  • 数组-二分查找

    1 Search a 2D Matrix 1 1 题目描述 span class token comment You are given an m x n integer matrix matrix with the following t
  • 超易懂!二分查找 详析

    二分算法的 本质 是 xff1a 假如我们可以找到事物的 某种性质 xff0c 这种性质 可以将区间一分为二 xff0c 一半满足 xff0c 一半不满足 我们就可以二分 另外 xff0c 有 连续性 必可以 二分 二分模板一共有两个 xf
  • 二分查找BinarySearch原理分析、判定树、及其变种

    二分查找BinarySearch 1 二分查找及其要求 二分查找 又叫折半查找 是一种效率较高的查找算法 1 二分查找的要求 线性表是有序表 即表中结点按关键字有序 并且要用向量作为表的存储结构 不妨设有序表是递增有序的 存储结构 二分查找
  • 【牛客面试必刷TOP101】Day4.BM15删除有序链表中重复的元素-I和BM17二分查找-I

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 牛客面试必刷TOP101 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 前言 一 删除有序链表中重复的元素 I 题目描述 解题分析 二 二分查找 I 题目
  • 《数据结构与算法》实验:查找结构的实验比较——二叉查找树BST & 二分(折半)查找

    数据结构与算法 实验和课程Github资源 数据结构与算法 实验 线性结构及其应用 算术表达式求值 数据结构与算法 实验 树型结构的建立与遍历 数据结构与算法 实验 图结构的建立与搜索 数据结构与算法 实验 查找结构的实验比较 二叉查找树B
  • 二分查找法(折半查找法)及C语言实现

    折半查找 也称二分查找 在某些情况下相比于顺序查找 使用折半查找算法的效率更高 但是该算法的使用的前提是静态查找表中的数据必须是有序的 例如 在 5 21 13 19 37 75 56 64 88 80 92 这个查找表使用折半查找算法查找
  • JavaScript实现 -- 二分搜索

    二分搜索 二分搜索 binary search 也称折半搜索 对数搜索 是一种在有序数组中查找某一特定元素的搜索算法 原理 二分搜索算法的原理和猜数字游戏类似 就是有人让你从1 100之间选一个数字让他猜 他告诉你猜测的数字 你回复他猜测的
  • 寻找重复数

    lettCode 287 寻找重复数 给定一个包含 n 1 个整数的数组 nums 其数字都在 1 到 n 之间 包括 1 和 n 可知至少存在一个重复的整数 假设只有一个重复的整数 找出这个重复的数 示例 1 输入 1 3 4 2 2 输
  • Leetcode刷题209. 长度最小的子数组

    给定一个含有 n 个正整数的数组和一个正整数 target 找出该数组中满足其和 target 的长度最小的 连续子数组 numsl numsl 1 numsr 1 numsr 并返回其长度 如果不存在符合条件的子数组 返回 0 示例 1
  • 记录-常见算法的收集

    1 快速排序 找到基准点的位置 既不浪费空间又可以快一点的排序算法 如 6 1 2 7 9 3 4 5 10 8 这10个数进行排序 首先找到一个数作为基准点 一个参照数 为了方便 让第一个数6作为基准点 然后将这个序列中所有比基准数大的数
  • 元素和小于等于阈值的正方形的最大边长

    LeetCode 1292 元素和小于等于阈值的正方形的最大边长 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold 请你返回元素总和小于或等于阈值的正方形区域的最大边长 如果没有这样的正方形区域 则返回 0 示
  • 二分查找(Binary Search) 常见问题解决方法总结

    缘由 今天浏览 何登成的技术博客 无意中发现了写的blog 二分查找 Binary Search 需要注意的问题 以及在数据库内核中的实现 随想总结下二分查找的常见问题 问题背景 今年的实习生招聘考试 我出了一道二分查找 Binary Se
  • LeetCodes刷题总结1——寻找两个正序数组的中位数

    题目 给定两个大小分别为 m 和 n 的正序 从小到大 数组 nums1 和 nums2 请你找出并返回这两个正序数组的 中位数 算法的时间复杂度应该为 O log m n 示例1 输入 nums1 1 3 nums2 2 输出 2 000
  • LeetCode 1493. 删掉一个元素以后全为 1 的最长子数组 - 二分 + 滑动窗口

    删掉一个元素以后全为 1 的最长子数组 提示 中等 90 相关企业 给你一个二进制数组 nums 你需要从中删掉一个元素 请你在删掉元素的结果数组中 返回最长的且只包含 1 的非空子数组的长度 如果不存在这样的子数组 请返回 0 提示 1
  • Aggressive cows-疯牛POJ(2456)-详解

    描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000 000 但是 John的C 2 lt C lt N 头牛们并不喜欢这
  • 无序(未排序)数组二分查找

    二分查找也称折半查找 Binary Search 它是一种效率较高的查找方法 但是 折半查找要求线性表必须采用顺序存储结构 而且表中元素按关键字有序排列 但是对于无序数组 我们可以先排序在二分 但还有一种技巧就是结合快排的思想 即每次选择一
  • Leetcode646. 最长数对链

    Every day a Leetcode 题目来源 646 最长数对链 解法1 动态规划 定义 dp i 为以 pairs i 为结尾的最长数对链的长度 初始化时 dp 数组需要全部赋值为 1 计算 dp i 时 可以先找出所有的满足 pa
  • 算法通关村——二分查找在寻找数组峰顶中的应用

    题目 在数组i的某个位置i 开始 从 0 到 i 都是递增的 从 i 1 都是递减的 请你找到这个最高点 方法一 使用线性遍历实现 分析 最高点如果存在 需要满足arr i 1 lt arr i gt arr i 1 又因为题目说了0到i就

随机推荐

  • Linux 线程挂起与唤醒功能 实例

    pthread cond wait 多线程的条件变量 条件变量是利用线程间共享的 全局变量进行同步的一种机制 xff0c 主要包括两个动作 xff1a 一个线程等待 34 条件变量的条件成立 34 而挂起 xff1b 另一个线程使 34 条
  • PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

    前言原理简介输入参数准备 1 objectPoints特征点世界坐标2 imagePoints特征点在摄像头下的像素点坐标3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下
  • Linux下socket编程,附带tcp例子

    1 网络中进程之间如何通信 xff1f 本地的进程间通信 xff08 IPC xff09 有很多种方式 xff0c 但可以总结为下面4类 xff1a 消息传递 xff08 管道 FIFO 消息队列 xff09 同步 xff08 互斥量 条件
  • 程序员加班到深夜,你经历过没?

    我看到了自己的影子啊 虽然自己非科班出身 xff0c 学历也不高吧 xff0c 但是自认为还是很努力的 xff0c 但是为什么现在的工资水平却跟应届生差不多呢 xff1f xff08 xff09 仔细想想 xff0c 自己毕业3年了 xff
  • 【C/C++学院】(16)QT版:幸运大抽奖

    程序效果 xff1a ifndef DIALOG H define DIALOG H include lt QDialog gt include lt QLabel gt include lt QPushButton gt include
  • 【Python基础】--Pickle/函数默认参数/函数的参数*args/Bytes<=>str/32-64bit/bytes对象

    Pickle gt gt gt import pickle gt gt gt my list 61 1 2 3 39 haha 39 39 and 39 39 or 39 gt gt gt pickle file 61 open 39 my
  • Windows平台python操作串口示例,可以加工下,改写成方便的测试软件

    在 windows中 xff0c 使用 Python 进行串口编程需要安装一个 Serial 模块 pyserial xff1a 下载地址 https pypi python org pypi pyserial下载完成后得到一个 pyser
  • 告别csdn一年了

    原本坚持了4年的学习 xff0c 整理笔记 xff0c 在csdn平台上进行发表 xff0c 记录 同朋友们互动 xff0c 探讨进行学习 xff0c 自己也在不断地成长 今天再次进入博客页面 xff0c 发现界面来了个大改版 xff0c
  • php视频课程

    php视频课程 xff1a 下载地址 xff1a http php itcast cn php video shtml 注 xff1a 此系列视频 xff0c 韩顺平主讲 1 php入门到精通教程 2 第二版mysql视频教程 进行中 3
  • pixhawk ulg转csv

    ulg是目前最新版px4固件生成的log格式 xff0c 下载最新版的flightplot即可对内部数据进行预览分析 xff0c flightplot中支持部分函数和运算符操作 xff0c 但对带 数据的操作不支持 xff0c 如需要对某些
  • 将Kinetic中的Gazebo7升级为Gazebo9

    将Kinetic中的Gazebo7升级为Gazebo9 一 查看所有gazebo7的相关包二 卸载当前已安装的gazebo相关包三 添加源四 安装新版本gazebo五 安装gazebo ros pkgs六 后记 官方教程 http gaze
  • 你真的了解串口 (Serial)吗?

    一 串口的定义 串口 xff0c 全称串行通信接口或串行通讯接口 xff0c 是一种常用于电子设备间通讯的全双工扩展接口 xff1b 串行通信 xff0c 串口通讯的技术基础 xff0c 指一位一位地按顺序传送数据 其特点是线路简单 xff
  • PnP 单目相机位姿估计(三):二维码角点检测

    解PnP问题时用二维码的好处二维码识别的流程代码最后 IDE xff1a visual studio 2013 使用库 xff1a Eigen opencv2 4 9 文档版本 xff1a 1 0 解PnP问题时 xff0c 用二维码的好处
  • 2014年计算机求职总结--面试篇

    又一年实习招聘陆续开始了 xff0c 这里分享一下我在2013年实习招聘和秋季招聘中的一些面试经历 xff0c 希望能对找工作的同学有所帮助 2013年面试过的公司有蘑菇街 网易游戏 阿里巴巴 腾讯 百度 大众点评 人人网 雅虎 xff08
  • 用位运算实现两个整数的加减乘除运算

    位运算的思想可以应用到很多地方 xff0c 这里简单的总结一下用位运算来实现整数的四则运算 1 整数加法 int Add int a int b for int i 61 1 i i lt lt 61 1 if b amp i for in
  • 深入理解C/C++数组和指针

    版权所有 xff0c 转载请注明出处 xff0c 谢谢 xff01 http blog csdn net walkinginthewind article details 7044380 C语言中数组和指针是一种很特别的关系 xff0c 首
  • 轻松搞定面试中的链表题目

    版权所有 xff0c 转载请注明出处 xff0c 谢谢 xff01 http blog csdn net walkinginthewind article details 7393134 链表是最基本的数据结构 xff0c 面试官也常常用链
  • 轻松搞定面试中的二叉树题目

    版权所有 xff0c 转载请注明出处 xff0c 谢谢 xff01 http blog csdn net walkinginthewind article details 7518888 树是一种比较重要的数据结构 xff0c 尤其是二叉树
  • 动态内存分配(malloc/free)简单实现--隐式空闲链表

    本文使用隐式空闲链表实现简单的动态内存分配 动态内存分配器维护一个大块区域 xff0c 也就是堆 xff0c 处理动态的内存分配请求 分配器将堆视为一组不同大小的块的集合来维护 xff0c 每个块要么是已分配的 xff0c 要么是空闲的 实
  • 二分查找,你真的掌握了吗?

    版权所有 xff0c 转载请注明出处 xff0c 谢谢 xff01 http blog csdn net walkinginthewind article details 8937978 二分查找 xff0c 最基本的算法之一 xff0c