![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Wzning0421
I'm always learning.
展开
-
牛牛爱66
今天面试了一道算法题,这到算法题我写的有问题,我在这里记录一下。众所周知,牛牛不喜欢6这个数字(因为牛牛和66发音相近)所以他想知道,不超过n位十进制数中有多少个数字不含有连续的6(从1开始算的)输入只包含一个正整数n(1<=n<20),输出一个整数,表示不超过n位十进制数中有多少个数字不含有连续的6。比如输入1,输出10: 1,2,3,4,5,6,7,8,9,10 这十个数字中都满足条件输入2,输出99,因为只有66不满足条件。分析:我是用动态规划的方式来写的,首.原创 2020-06-30 08:59:44 · 610 阅读 · 0 评论 -
并查集详解
江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多少个弯,都认为是自己人。这样一来,江湖上就形成了一个一个的帮派,通过两两之间的朋友关系串联起来。而不在同一个帮派的人,无论如何都无法通过...转载 2020-03-26 14:51:09 · 200 阅读 · 0 评论 -
求0到数字n中的所有数字中某一个数字k出现的总次数
今天在leetcode上面遇到了一道题:编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。这道题最好的解法是动态规划。分析如下:设dp[i]标志这个数字前i位中出现了2的次数,那么我们需要求的是dp[i]和的dp[i - 1]的关系。比如说一个数字2849,那么dp[2]就表示0~49中出现2的数量,dp[3]就表示0~849中出现2的数量,dp[4]就表示0~28...原创 2020-03-17 18:29:36 · 804 阅读 · 0 评论 -
求连续区间和为目标值的一种解题思路
今天在leetcode上面遇到了一道题,我觉得解题思路很好,在此记录下来:题目是:给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。返回该子数组,若存在多个最长子数组,返回左端点最小的。若不存在这样的数组,返回一个空数组。如:输入: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7","...原创 2020-03-17 15:47:29 · 1178 阅读 · 0 评论 -
字符串 kmp算法解析
kmp算法是用于解析字符串匹配的问题。给定两个字符串:第一个是文本串str,第二个是匹配串p。问str中最早有那个位置能完全和匹配串p匹配呢?1. 暴力匹配假设文本串的长度为n,匹配串的长度为m. 那么显然有一种暴力解法是:int match(string str, string p){ int i = 0; int j = 0; while (i < str.size(...原创 2020-02-03 13:41:53 · 405 阅读 · 0 评论 -
腾讯校园招聘笔试 2019-8-17 第五题
自己是真滴菜啊,跟着师兄做校招笔试被虐的体无完肤。在这里记录一下几道题的解法吧。由于业绩优秀,公司给小Q放了n天的假。身为工作狂的小Q打算在假期中工作、锻炼或者休息。他有一个奇怪的习惯,:不会连续两天工作或锻炼。只有当公司营业时,小Q才能去工作,只有当健身房营业时,小Q才能去健身,小Q每天只能干一件事。给出假期中的公司,健身房营业情况,求小Q最少需要休息几天。输入描述:第一行一个整数n...原创 2019-08-18 13:29:40 · 1675 阅读 · 2 评论 -
腾讯校园招聘笔试 2019-8-17 第三题
小Q在进行一场竞技游戏,这场游戏的胜负关键就在于能够能争夺一条长度为L的河道,即可以看作是[0,L]的一条数轴。这款竞技游戏当中有n个可以提供视野的道具-真视守卫,第i个真视守卫能够覆盖区间[xi,yi]。现在小Q想知道至少用几个真视守卫就可以覆盖整段河道。输入:输入包括n+1行。第一行包括两个整数n和L(1<=n<=10^5,1<=L<=10^9)接下...原创 2019-08-18 15:51:25 · 1675 阅读 · 1 评论 -
牛客网 丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。话说这道题最直接的办法就是遍历每个数字,如果这个数字能被2,3,5除尽,那么就是丑数,否则就不是。但是显然会超时。所以用一个好的办法:排序队列。分析:一个丑数的因子只有2,3,5,那么丑数p = 2 ^ ...原创 2019-09-04 23:02:57 · 156 阅读 · 0 评论 -
牛客网 平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。话说这题有两种做法。首先平衡二叉树指的是:一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。所以直接来想的话,只要保证根节点的左右子节点都是平衡二叉树,并且两个子树的高度相差都是小于等于1就可以了。代码如下所示:class Solution {public: bool Is...原创 2019-09-07 20:06:00 · 240 阅读 · 0 评论 -
排序算法之 桶排序
桶排序假设输入数据服从均匀分布,而且需要已知待排序列的大概范围,是一种空间换时间的排序算法。桶排序的基本思想是:桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数...原创 2019-09-18 13:56:33 · 249 阅读 · 0 评论 -
缓存淘汰算法 LRU
LRU(least recent used)算法,指的是最近最少访问淘汰算法,是内存不够的场景下,淘汰旧内容的策略。当内存中发生缺页异常的时候,需要从磁盘中读出最新的一页,那原来的一段时间内最少被访问的那一页就需要被替换掉。如何自己实现一个LRU队列,给定队列的容量,使之在常数时间内就能实现插入新的一页,删除最少访问的一页等操作呢?我们用基于hashmap和双向链表的方法:如上图所示:...原创 2019-09-18 16:47:21 · 178 阅读 · 0 评论 -
排序算法之 堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。什么是完全二叉树呢?可以看下这篇文章:https://blog.csdn.net/hanzhen7541/article/details/99437854所以说,堆排序是将数组当做完全二叉树、根据完全二叉树的特性来...原创 2019-08-16 17:16:54 · 219 阅读 · 0 评论 -
排序算法之 插入排序
所谓插入排序,是一种简单而稳定的排序方法。基本思想是:将序列分成有序组和无序组。每次从无序组中选择一个,以插入的形式放进有序组。知道无序组的数字被抽光,所得到的有序组就是最终的排序结果。代码实现如下:void insert_sort(int *array,unsigned int n){ int i,j; int temp; for(i=1;i<n;i++...原创 2019-08-15 22:29:30 · 104 阅读 · 0 评论 -
upper_bound( )和lower_bound()的用法
lower_bound( )和upper_bound( )都是在排好序的数组中使用的。他们利用二分查找,以O(logn)的时间复杂度返回一个符合条件的索引值。下面进行解析:非重载的lower_bound( )和upper_bound( )用于在从小到大的排序数组中的查找:lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等...原创 2019-08-19 13:58:55 · 280 阅读 · 0 评论 -
最长上升子序列LIS 动态规划 二分查找算法
所谓LIS表示最长上升子序列,是面试的时候非常容易考察的问题。对于一个序列h1,h2,...hN,其中的子序列hi1,hi2,...hik,满足hi1<hi2<...<hik,那么这个子序列叫做上升子序列。那么如何求出最长的上升子序列呢?最容易想到的办法是动态规划,其中它的复杂度是O(n^2)。我们设置dp[i]表示从0~i之内最长的上升子序列的长度。那么对于任意的索引j(0...原创 2019-08-19 13:59:51 · 411 阅读 · 0 评论 -
腾讯校园招聘笔试 2019-8-17 第四题 另一种解法
之前在博客https://blog.csdn.net/hanzhen7541/article/details/99710954中我们讨论了一种单调栈的解法,复杂度是O(nlogn)。那么实际上还有一种解法,用的是动态规划+二分查找。首先看一下题目:小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。小Q从第一栋一直走到了最后一栋,小Q从来没有看到过...原创 2019-08-19 15:58:31 · 1302 阅读 · 0 评论 -
牛客网 字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。这道题我最开始的想法是递归,每次处理一个字符,然后将其存在一个字符串里面,当字符串到了指定的长度,就把它放在一个vect...原创 2019-08-23 19:05:41 · 254 阅读 · 0 评论 -
矩阵快速求幂
今天看《剑指offer》看到一个递推关系:f(n) = f(n-1) + f(n-2). 书中提出了一种简单的算法,也就是矩阵乘法:如果是n次方,那么时间复杂度应该是O(n). 那么有没有一种更快的算法呢?快速幂算法能让时间复杂度降至O(logn).怎么来做快速幂算法呢?我们首先先想一个简单的,一个数字a,求他的75次幂。75的二进制是1001011 ,所以实际上a^75 = a^64...原创 2019-08-14 23:04:35 · 1614 阅读 · 0 评论 -
牛客网 正则表达式匹配
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。这道题最开始我的分析思路有点偏差,重点在于如何分析这个“*”. 显然当一个一个字符读入的时候...原创 2019-08-20 15:50:15 · 363 阅读 · 0 评论 -
二分查找 递归与非递归实现
二分查找将一个有序数组查找的时间复杂度从O(n)降到了O(logn). 首先是最基本的二分查找:public int binarySearch(int[] arr, int target, int n){//n是数组总长度 int low = 0, high = n-1, mid; while(low <= high){ mid = low + (hig...原创 2019-08-15 14:12:40 · 226 阅读 · 0 评论 -
牛客网 二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。返回值应该是一个指向值最小节点的指针。思路:很明显,当中序遍历一个二叉搜索树的时候,结果就是由小到大遍历的。那么我们需要找一种方法能够持续连接中序遍历的时候的某个节点和它的下一个节点,从而形成双向链表。代码如下:/*struct TreeNode ...原创 2019-08-24 14:17:18 · 190 阅读 · 0 评论 -
c++排序算法之 快速排序
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序的序列。 复杂度分析:快速排序在最理想的情况下复杂度是O(nlogn),在最差的情况下是O(n^2)....原创 2019-08-15 20:54:15 · 162 阅读 · 0 评论 -
排序算法之 归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。具体而言,是让每个小的子序列都有序,然后有序的合并这些子序列,从而得到一个整体有序的序列。对于归并排序,其时间复杂度是O(nlogn).因为每次都将其对半分,...原创 2019-08-15 21:55:21 · 126 阅读 · 0 评论 -
腾讯校园招聘笔试 2019-8-17 第四题
小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。小Q从第一栋一直走到了最后一栋,小Q从来没有看到过这么多高楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住)输入描述:输入第一行将包含一个数字n,表示楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表一栋楼的高度。...原创 2019-08-18 23:06:43 · 3115 阅读 · 4 评论