
算法
文章平均质量分 59
介绍一些算法的原理以及实现
Surplus°
If not me, then who? If not now, then when?
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
size_t和int比较时注意符号问题!
今天在写kmp算法时出现了一个奇怪的问题:#include<iostream>#include<string>#include<vector>using namespace std;void getNextVal(vector<int>& next,string& t){ next[0] = -1; int i = 0; int j = -1; while (i < int(t.size()) - 1) { i原创 2021-03-06 09:50:06 · 602 阅读 · 1 评论 -
二分查找算法详解(经典二分和左右边界查找)
这篇文章主要讲解经典的二分查找算法以及二分查找算法的变种(左右边界的查找)。二分查找算法的基本思想:在有序表中,每次都取中间记录作为比较对象,若给定值与中间记录的关键字相等则查找成功,返回该关键字的索引;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上诉过程,直到查找成功,或者所有查找区域无记录,查找失败为止,返回一个值代表没有找到。原创 2021-02-09 11:12:18 · 8413 阅读 · 5 评论 -
多数投票算法(Boyer-Moore Algorithm)详解
多数投票算法(Boyer-Moore Algorithm)给定一个无序数组,有n个元素,找出其中的一个多数元素,多数元素出现的次数大于一半,注意数组中也可能不存在多数元素,如果存在多数元素则返回该多数元素,否则返回-1。原创 2021-01-29 21:54:49 · 1640 阅读 · 2 评论 -
常见排序算法之归并排序原理及递归非递归版本代码
归并排序主要思想是分治,先将要排序的元素分成两个子集,先将这两个子集排列成有序,然后将这两个有序的序列归并为一个有序的序列。原创 2020-10-20 21:24:13 · 400 阅读 · 0 评论 -
常见排序算法之快速排序原理及递归非递归版本代码
目录快速排序原理复杂度分析选择排序代码1.递归版本2.非递归版本测试及结果测试结果快速排序原理之前介绍过三种基础的排序算法以及它们之间的比较:冒泡排序,选择排序和直接插入排序,我们知道它们的时间复杂度都是O(n2),那是不是所有的算法的时间复杂度都是O(n2)呢?当然不是!下面我们介绍的快速排序之所以叫快速排序就是因为目前已有的排序算法中,快速排序的时间复杂度是最小的。快速排序的基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可以分别对这两部分记录继续进行排原创 2020-10-19 20:11:08 · 716 阅读 · 0 评论 -
排列组合之子集及其变形题--字节跳动原题
字节跳动在2020年8月的一道原题:在n个正整数中,任意挑选k个(不可重复挑选,0<=k<=n)数字的和记为sum,另有一个正整数m,请问sum%m最大是多少?输入输出#include <iostream>#include <vector>using namespace std;int n;vector<vector<int>> ans;void backtrack(int first, vector<int>&原创 2020-10-10 20:47:01 · 235 阅读 · 0 评论 -
由二叉树的前序遍历和中序遍历得到叶子节点的个数--字节跳动原题
由二叉树的前序遍历和中序遍历得到叶子节点的个数题目第一行输入节点数量,第二行输入二叉树前序遍历的结果,第三行输入二叉树中序遍历的结果,要求输出叶子节点的数量输入31 2 32 1 3输出2思路分析可以先由二叉树的前序遍历和中序遍历构建出一棵二叉树,然后在遍历二叉树得到叶子节点的数量!源码#include <fstream>#include <iostream>#include <algorithm>#include <vector&原创 2020-08-22 21:16:11 · 790 阅读 · 0 评论 -
回溯法之迷宫问题(华为笔试题)
目录回溯法原理回溯法之迷宫问题代码回溯法原理可以参考我的另一篇博客。回溯法之迷宫问题2020/8/12日的华为笔试出了一道笔试迷宫问题的改版,题目大致的意思如下:有一条刚贴地砖的路,强迫症小明走路每次走的步长一样,并且只走贴了地砖的地方,如果用1代表贴了地砖,用0代表没有地砖,问小明能否从左上角出发走到终点右下角。例题:输入23 51 0 1 0 00 0 0 1 00 0 1 0 1输出true其中2是步长,即小明一次走两步,3和5分别代表行数和列数。下面3行5列是代表有原创 2020-08-13 21:54:17 · 654 阅读 · 0 评论 -
回溯法之N皇后问题--得到多解以及只得到一个合适解
目录回溯法原理回溯法之N皇后问题代码(C++实现)结果回溯法原理具体的原理可以看这篇博客。写的非常好,这里引用一下原文。回溯法有通用解法的美称,对于很多问题,如迷宫等都有很好的效果。回溯算法实际上一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。回溯法说白了就是穷举法。回溯法一般用递归来解决。回溯法一般都用在要给出多个可以实现最终条件原创 2020-08-13 21:30:40 · 1561 阅读 · 0 评论 -
常见排序算法之直接插入排序及三种基础算法对比
目录直接插入排序算法思想时间复杂度直接插入排序代码直接插入排序测试结果直接插入排序与冒泡排序、选择排序对比测试代码对比结果完整代码mysort.hmysort.cppprint_data.hprint_data.cppmain.cpp直接插入排序直接插入排序和冒泡排序、选择排序是3种基础排序算法。前面已经介绍了冒泡排序以及选择排序,下面介绍一下直接插入排序。3种排序方式的时间复杂度都是O(n2),但是直接插入排序相比前两种排序方式性能更好,直接插入排序更加适合于已经基本有序和数据量较少的情况。插入排序的原创 2020-08-04 15:03:40 · 869 阅读 · 0 评论 -
LeetCode刷题笔记(2)——外观数列、连续子数组的最大和等
LeetCode刷题笔记(2)1.外观数列原创 2020-07-19 16:07:13 · 150 阅读 · 0 评论 -
LeetCode刷题笔记(1)——两数之和、仅仅反转字母、奇偶链表等
LeetCode刷题笔记1.两数之和2.仅仅反转字母3.奇偶链表原创 2020-07-18 22:46:00 · 220 阅读 · 0 评论 -
SUSAN角点检测与匹配算法代码(OpenCV)
SUSAN(Small univalue segment assimilating nucleus)是一种基于灰度图像以及窗口模板的特征点获取方法,适用于图像中边缘和角点的检测,对噪声鲁棒,而且具有简单、有效、计算速度快等特点。本文结合SUSAN算法原理, 实现SUSAN角点检测,并结合Brief描述子,实现角点匹配算法。话不多说,直接上代码,代码有详细的注释!后面还有相应的论文,感兴趣的可以深入研究一下。原创 2019-04-06 19:53:59 · 4067 阅读 · 1 评论 -
图像连通域分析及相关算法研究——很详细的原理以及简单的代码
图像连通域分析1、连通域的基本概念(1)两步法图解两步法的matlab代码如下function [ outImg, labels ] = MyBwLabel( inputImg )%MyBwLabel 自制的连通区域分析函数% [ outImg, labels ] = MyBwLabel( inputImg )% inputImg: 输入的图像,要求是二值化图像,且最大值为...原创 2019-11-21 23:27:17 · 21990 阅读 · 9 评论