![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法区
文章平均质量分 51
yanerhao
信雅之言,微言大意
展开
-
回溯算法——GO解决Leetcode
1,46题,全排列var res [][]intfunc permute(nums []int) [][]int { res=nil helper(nums,[]int(nil)) return res}func helper(nums[]int,tmp []int){ if len(tmp)==len(nums){ //不能直接用tmp // 这个 tmp 变量是一个地址引用,结束当前递归,将它加入 res,后续的递归分支还要继原创 2021-08-29 21:59:06 · 364 阅读 · 0 评论 -
leet-code 所有二叉树路径问题
二叉树路径的问题大致可以分为两类:1、自顶向下:顾名思义,就是从某一个节点(不一定是根节点),从上向下寻找路径,到某一个节点(不一定是叶节点)结束具体题目如下:原创 2021-06-06 20:55:56 · 327 阅读 · 0 评论 -
二分法解决最值的最值化
1.两球之间的磁力,求的是m个球中相邻两球距离的最小值的最大化func maxDistance(position []int, m int) int { /* 二分法,图片可以参考:https://leetcode-cn.com/problems/magnetic-force-between-two-balls/solution/c-er-fen-sou-suo-by-acvv_itdef-og5j/ 0.最小磁力指的是这 m 个球中相邻两球距离的最小值的结论。对于i<j原创 2021-04-19 22:48:41 · 245 阅读 · 0 评论 -
字典树及GO实现
Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。前缀树的3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符原创 2021-03-28 14:29:25 · 280 阅读 · 0 评论 -
并查集及GO实现
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。并查集被很多人认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。 查询(Find):查询两个元素是否在同一个集合中。具体引入可以参考:说明三种主要操作:Make_Set(x):建立一个新的集合,其唯一原创 2021-03-27 15:39:23 · 870 阅读 · 0 评论 -
借助GO接口实现堆
https://blog.csdn.net/weixin_40631132/article/details/105208272转载 2020-12-26 01:35:14 · 187 阅读 · 0 评论 -
leetcode 770 Basic Calculator IV题目解析
func basicCalculatorIV(expression string, evalvars []string, evalints []int) []string { index=0 //must have else commit alwalys fail however exe is right fmt.Println(expression) var res []string str = expression gEvalvars = evalvars gEvalints .原创 2020-12-18 22:29:39 · 296 阅读 · 1 评论 -
堆及堆排序和应用-go实现
1 堆排序//heap/*根据树的性质,树节点前一半一定是分支节点(有孩子),故从这些节点开始调整出初始堆,,len(a)/2-1是第一个非叶子 */ func constructHeap(heap []int) { for i:=len(heap)/2-1;i>=0;i-- { adjustHeap(heap,i,len(heap)) } } /*每次调整使得满足堆定义 */ func adjustHeap(heap []int,start,length int)原创 2020-12-17 17:41:25 · 198 阅读 · 0 评论 -
golang实现中文字符串最大子串长
代码func LCSLength(x []rune, y []rune) int { var m, n int m = len(x) n = len(y) lookup := make([][]int, m+1) for i := range lookup { lookup[i] = make([]int, n+1) } var i, j int for i = 0;...原创 2020-03-07 18:52:17 · 968 阅读 · 0 评论 -
阶乘的精确值
例如输入不超过1000的正整数n,输出n!=1X2X3...Xn的精确结果。例如输入30输出 26525285981219058636308480000000当输入1000时1000的阶乘约4*10^(2567),大概3000位数字,如果采用普通的阶乘算法很明显溢出:int fun(int n){ int i; int s=1; for(i=1;i<=n;i++)原创 2017-01-18 22:08:40 · 773 阅读 · 2 评论 -
最长回文字符串常用求法
最长回文字符串常用求法一般有以下几种:1 暴力求解#define max 100+10char buf[max*2];char tmp[max*2];void get_longest_str(){printf("请输入字符串\n");fgets(buf,max,stdin);//fgets输入,遇见换行才停int len=strlen(buf);int i,j=0;int原创 2017-01-15 20:54:06 · 509 阅读 · 0 评论 -
基数排序C/C++
目前主流内排序两大类:一类是比较关键字大小,这一类很常见,比如:插入排序:直接插入排序(稳定)和希尔排序(升级版,不稳定);选择排序:直接选择排序(不稳定)和堆排序(以完全二叉树为基础,不稳定);交换排序:冒泡排序(稳定)和快速排序(升级版,不稳定);归并排序(选择基准,稳定);还有有一类是不必比较关键字如基数排序,她是根据关键字中各位的值通过对排序的n个元素进行分配和收集原创 2016-08-02 20:48:47 · 761 阅读 · 0 评论 -
AVL平衡二叉树旋转说明
AVL插入时,会导致平衡失调,需要旋转,一般的:当在左子树增加时:顺时针旋转;当在右子树增加时:逆时针旋转原创 2015-12-16 21:00:34 · 467 阅读 · 0 评论 -
leetcdoe 帕斯卡尔三角形2 Pascal's Triangle II
帕斯卡尔三角形:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].原创 2015-08-13 14:37:15 · 448 阅读 · 0 评论 -
leetcode 判断两棵树是否一致Same Tree
思路:递归判断即可: bool isSameTree(struct TreeNode* p, struct TreeNode* q) { if(p==NULL&&q==NULL)return 1; if(p==NULL||q==NULL)return 0; if(p->val!=q->val)return 0; else { return isSameTree(p->le原创 2015-08-15 13:55:21 · 990 阅读 · 0 评论 -
枚举排列
输入整数n,按照从小到大顺序给出所有排列:n=3则全排列为(从小到大):123132213231312321采用递归思想:先输出所有以1开头的序列----->再输入以2开始的排列------>接着是以3开始的。。。。最后是以n开始的序列。分析题意可知,以i(i=1,2,3...n)开始的序列,后面是1,2,。。。,i-1,i+1,。。。n数字的排列,并且也是原创 2017-03-02 19:44:41 · 2659 阅读 · 0 评论 -
leetcode 两个有序数组合成
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additio原创 2015-08-15 16:09:18 · 1012 阅读 · 1 评论 -
leetcode
你正在和朋友玩下面的Nim游戏:桌子上有一堆石头,每一次你们轮流取1至3颗石头。最后一个取走石头的人就是赢家。第一轮由你先取。你们俩都很聪明并且掌握玩游戏的最佳策略。编写函数,给定石头的个数,判断你是否可以赢得游戏。例如,如果堆中有4颗石头,那么你一定不会赢得游戏:无论你第一轮取走1,2,还是3颗石头,下一轮你的朋友都可以取走余下的所有石头。分析:当桌子上只有1或者2或者3个石头时原创 2015-10-14 19:11:42 · 405 阅读 · 0 评论 -
leetcode Majority Element 寻找出现次数最多元素
给定一个大小n的数组,求出现次数大于⌊ n/2 ⌋的元素:假定数组总是存在而且这样的元素总是存在:int com(const void *s1,const void *s2){int *p1=(int*)s1;int *p2=(int *)s2;return *p1-*p2;}int majorityElement(int* nums, int numsSize) { qsort(原创 2015-08-04 19:30:58 · 863 阅读 · 0 评论 -
leetcode Pascal's Triangle 帕斯卡尔三角形输出
Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]帕斯卡三角形,是一个三角形矩阵,其顶端是 1,视为(ro原创 2015-08-05 16:46:58 · 933 阅读 · 0 评论 -
leetcode Valid Anagram 异位体
Given two strings s and t, write a function to determine if t is an anagram of s.For example,s = "anagram", t = "nagaram", return true.s = "rat", t = "car", return false.一开始简单想法就是先将两个字符串排序,最后比原创 2015-08-05 17:23:35 · 410 阅读 · 0 评论 -
leetcode 删除单链表指定元素
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node p.Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value原创 2015-08-05 18:01:22 · 1063 阅读 · 0 评论 -
leetcode Symmetric Tree对称树的判断
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \3 4 4 3But th原创 2015-08-05 15:45:01 · 422 阅读 · 0 评论 -
leetcode Compare Version Numbers版本号比较
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 You may assume that the version strings are non-empty and contain only digits and the . character.T原创 2015-08-06 17:10:31 · 407 阅读 · 0 评论 -
leetcode Climbing Stairs
给定一个n阶数的梯子,每步可以跨1或者2阶,问最终上去的不同方法:分析:当阶数n=1,只有1种方法;当阶数n=2,有两种方法;当阶数n=3,其方法种数等于n=2的种数(剩下的1阶一步即可到达),再加上n=1的种树(剩下的2阶明显可以到达);当阶数n,其方法种数等于n-2的种数(剩下的2阶一步即可到达),再加上n11的种树(剩下的1阶明显可以到达);很容易知道是递归:in原创 2015-10-14 19:54:40 · 339 阅读 · 0 评论 -
leetcode Add Digits
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. For example: Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one dig原创 2015-10-12 19:49:56 · 505 阅读 · 0 评论 -
关于高精度运算bign类的实现
对与基本的运算由于数据类型存储空间有限导致运算结果较大时容易计算溢出,这里通过引入数字数组定义适用于高精度运算的bign类实现大数运算的精确表示,包括常见的赋值/比较/四则运算:#include#include#include#include#define MAX_L 2005using namespace std;class bign{ public: int len;原创 2017-02-15 09:29:25 · 837 阅读 · 0 评论 -
Leetcode Container With Most Water
原题意思是:给定n个非负整数并记为ai,a2,,,,an,将下标i可以看成X轴横坐标,值ai看成纵坐标,与X轴会形成面积不一样的矩形,任意两条这样的线段和 x 轴组成一个木桶矩形,找出能够盛水最多的木桶,返回其面积。注意面积大小S=min(ai,aj)|i-j|最简单方法,暴力求解,时间复杂度O(n^2)int maxArea1(vector height){int n=原创 2017-03-04 23:22:03 · 304 阅读 · 0 评论 -
图像人脸进行检测、识别和跟踪
最近整理了CV方向的一些产品基础知识,我上一篇文章《看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)》算是这个系列的第一篇;本文是本系列下的第二篇,主要针对人脸识别进行梳理。后续还会有多目标跟踪、OCR等方向的内容。希望大家能从这个系列收获到更多的CV干货:)人脸识别(Face Recognition):对图像中的人脸进行检测、识别和跟踪。1技术流程详解技术流程:...转载 2019-01-10 11:37:16 · 5410 阅读 · 0 评论 -
Binary Tree Zigzag Level Order Traversal
Binary Tree Zigzag Level Order TraversalGiven binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7return its zigzag level order traversal as:[ [3],原创 2017-10-20 21:31:48 · 246 阅读 · 0 评论 -
串模式匹配之BF算法和KMP算法
在给定两个串S=“s1s2...sn”和T=“t1t2...tm”,在主串S中寻找子串T的过程称为模式匹配,T称为模式,如果匹配成功则返回T在S中第一次出现的位置,否则返回0.在数据结构中一般串的存储采用的顺序存储:有两种算法来进行模式匹配:1、朴素的模式匹配算法--BF算法BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等原创 2015-05-23 20:22:35 · 2368 阅读 · 0 评论 -
二叉树之一BST树,AVL树详解及B树和红黑树原理分析
BST树,AVL树详解及B树和红黑树原理分析互联网面试中树尤其是BST,AVL是提问的重点也是难点,甚至B树乃至高级数据结构红黑树都是提问的重点,像阿里云面试就曾经问过map实现机制(红黑树)及其原理,这里我们要做到对BST/AVL完全熟悉能给出全部代码实现,红黑树、b树之类,有能力的需要完全理解,代码就不用掌握了。红黑树和b树看会就行了,当碰到你感觉他们不懂这方面的面试官的时候,可以逮着他们原创 2017-03-11 23:21:59 · 8624 阅读 · 2 评论 -
面试中常见几个问题描述
一01背包问题二哲学家就餐问题描述三银行家算法描述四生产-消费者模型代码原创 2017-08-21 22:54:22 · 568 阅读 · 0 评论 -
在从1到n的正数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。最简单思路,就是从1-n一个刚数字进行判断然后计数即可,int NumberOf1BeforeBetween1AndN_Solution1(unsigned int n){ int number = 0; // Fin原创 2017-09-02 16:08:10 · 355 阅读 · 0 评论 -
模式匹配算法
模式匹配:定义:主串s或者称作目标串,是匹配的的对象。而子串或者称作模式串t,是能在主串s中找到的一个与t相等的子串,实际上不属于主串s。这样称模式串t定位匹配主串的过程称作模式匹配。相关算法:1、BF算法即一个个比较。选择主串s,从第一个元素开始与模式串t第一个元素开始比较,如果相等则比较下一个;否则从主串第二个元素开始与模式串第一个字符比较。依次进行。int bf_inde原创 2015-09-22 21:18:59 · 530 阅读 · 0 评论 -
已知randx构造randx+n
例如如何根据随机函数rand7()来构造rand10()函数。已知rand7()函数返回1-7的随机数,那么rand7()-1将得到一个离散整数集合{0,1,2,3,4,5,6},该集合中每个整数的出现概率1/7,那么(rand7()-1)*7将得到另一个离散整数集合A={0,7,14,21,28,35,42},其中每一个概率也是1/7。而rand7()得到的集合B={1,2,3,4,5,6,7}原创 2017-09-15 10:53:21 · 499 阅读 · 0 评论 -
单链表有环问题
面试中单链表有环问题及其变形单链表是否相交是比较常见的问题,这里总结如下1判断是否有环,引入slow=slow->next慢指针和fast=fast->next->next,这两个指针如果有环则迟早相遇//是否有环struct node{int val;node* next;};bool ishoop(node *h){node *slow=h;node *fast=h;...原创 2017-09-23 10:25:06 · 665 阅读 · 0 评论 -
面试算法之范围搜索问题
例1:平面上百万个点,设计数据结构求每个点最近的k个点例2:游戏中打怪时已经各个小怪的坐标,你放一个技能是圆形范围,快速求能打到的小怪KD树:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html最近邻搜索: k近邻搜索:参考: http://blog.csdn.net/da转载 2017-09-05 11:31:42 · 2323 阅读 · 0 评论 -
互联网面试之最长公共字串LCS
子字符串的定义和子序列的定义类似,但要求是连续分布在其他字符串中。比如输入两个字符串:str1="shaohuizabd"str2="ahuixabc"公共字串有hui和ab,但最长是hui,长度3思路:将字符串s1和s2分别写在两把直尺上面(我依然用s1,s2来表示这两把直尺),然后将s1固定,s2的头部和s1的尾部对齐,然后逐渐移动直尺s2,比较重叠部分的字符串中的公共子串原创 2017-08-25 00:36:09 · 263 阅读 · 0 评论 -
01背包问题
01背包问题作为动态规划经典案例,经常会在面试中会被问,这里做个介绍。问题描述:定N个物品和一个背包。物品i的重量是Wi,其价值位Pi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大,即:在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入多次,也不能只装入物品的一部分。因此,该问题被称为0-1背包问题。 问题分析:令V(i,j)表...原创 2017-08-13 17:41:42 · 616 阅读 · 0 评论