![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 56
Jacketinsysu
No persistence, no man.
展开
-
图的两种表示和接口
常读常新,这里多分析了三个点: 1. 两种表示方式在另一个维度的比较; 2. 一种复杂应用场景下的取舍办法; 3. 经典表示方法之外的黑科技。原创 2017-02-05 09:05:45 · 1376 阅读 · 0 评论 -
leetcode-Count Primes
题意:计算比n小的素数的个数判断一个数字是否为素数的时间复杂度是O(n−−√)O(\sqrt{n}),如果直接做,总的时间复杂度就是O(n1.5)O(n^{1.5}),这个略慢。使用素数筛法~原创 2016-07-23 17:30:47 · 439 阅读 · 0 评论 -
再回首-无符号大整数加法
刚才在leetcode上看到一道二进制的加法,随即兴致来了,写了一个可以支持任意(正整数)基底的大整数加法。不过这个是无符号的,有符号其实就多了一点判断,顺便需要实现减法(借位的时候略麻烦,我以前是先比较两个数字的绝对值,用大的减去小的来做的)。原创 2016-07-23 17:03:33 · 1329 阅读 · 0 评论 -
最长回文子串
原题:http://hihocoder.com/problemset/problem/1032问题:比如abacca里面aba和acca都是回文子串,最长的是acca。三种思路对比分析,逐步优化。原创 2016-06-29 12:09:22 · 422 阅读 · 0 评论 -
最小的前k个数
最近在hadoop上写了一个分布式的KNN,其实本地的KNN也是需要用到的一个东西——从N个距离中选出K个最小的,从而投票得出预测的类别。这个问题看似很简单,但要做好,还是有难度的。原创 2016-06-26 20:37:15 · 829 阅读 · 0 评论 -
链表合并
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目链接:牛客网模拟归并排序的合并的过程~ 可以用迭代,也可以用递归,递归的写法十分整洁易读!!!原创 2016-04-09 13:34:00 · 429 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。算法其实很简单,利用后序遍历的特性,根节点是在最后面的,那么我们找到了根节点之后,利用左子树的所有节点必定是小于它,右子树的所有节点必定是大于它的,可以将前面的数组分成两部分,两部分再递归操作就行了~原创 2016-04-14 13:23:50 · 776 阅读 · 0 评论 -
从二叉树的前序遍历序列和中序遍历序列重构出二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。原创 2016-04-11 11:59:14 · 1650 阅读 · 0 评论 -
字典树再战
昨天校赛,遇到了一道字典树的题目,卡了挺久,原因不是不会写,而是被vector指针初始化坑了(现在改用数组了,哼)。感觉得好好总结一下字典树,下面先po这个问题,然后写个字典树模板,最后将模板修改成能够解决这个问题。原创 2016-04-11 11:06:44 · 634 阅读 · 0 评论 -
蛇形的二叉树层次遍历
蛇形的意思是:先从左到右,下一层从右到左,然后再从左到右……这是今天(04/13)遇到的一道很有趣的电话面试(白板编程)题目,我想到的思路很简单,把从右到左的那一层先存起来,最后逆序输出即可,不过写起来的话,还是需要基本功很扎实、逻辑清晰、思维敏捷的,我现场写的有很多bug,今晚自己整理了一下,攒一点rp原创 2016-04-14 01:09:55 · 2705 阅读 · 0 评论 -
大整数类-实现加减法
上次写了一个“无符号大整数加法”,是比较容易的,这次实现了完整的大整数的加减法,支持有符号的!不过实现起来感觉不是很顺畅,感觉可以优化的地方还很多,先贴一下代码,日后再来优化。另,思路主要是模拟手算的过程,计算方式在注释里有说清楚。原创 2016-08-03 20:08:12 · 2075 阅读 · 0 评论 -
《剑指offer》:自己写一个pow函数
今天打google在codejam上办的apactest,成绩还行吧(最后排名540),第二题逗比了,自己逻辑后来理清楚,但是代码还是原来的想法,wa了两次才找到了bug。 第二题需要实现一个整数的pow函数,之前只会递归的写法,今天学会了迭代的写法,回想《剑指offer》里也有类似的东西,所以整理成这篇博客。原创 2016-08-30 10:58:50 · 3533 阅读 · 0 评论 -
区间覆盖与合并
问题最近打google的apactest,遇到一个经典的(但我不熟的)问题——给你一堆整数区间(比如[1, 3], [2, 6], [8, 10]),问它们合并后是怎样的? 比如上述三个区间合并后就变成:[1, 6], [8, 10]。这个问题在leetcode上的难度评级是Hard,简直亮瞎啊,其实并不难呀。原创 2016-08-30 11:31:29 · 5952 阅读 · 1 评论 -
快速排序怎么写?
介绍快速排序有两种经典的写法,复杂度对比,以及优化的讨论。原创 2016-09-18 01:54:38 · 3487 阅读 · 2 评论 -
马走日
在一个8*8的空白棋盘上,马的行走规则是”日“字形,也就是有8个方向可以走。给定棋盘上的两个点P和Q,求解一条路线从P到Q。原创 2016-09-21 22:00:28 · 4572 阅读 · 0 评论 -
用迭代实现归并排序
最近在知乎上看到一个帖子,总结了各种常见的排序算法,并用python一一实现了,不过归并排序的迭代写法,题主说他不会写,我就试了一下,其实很简单。下面会先分析递归的时候实际上做了哪些事,然后迭代如何重现这些事。先用C++写,因为估计看这篇博客的大部分人对C++比较熟,最后会分享python的版本,实现过程基本一模一样。原创 2016-09-08 15:55:18 · 6874 阅读 · 2 评论 -
算法导论:红黑树
算法导论的红黑树讲解很好,插入的调整比较容易懂,但是删除的调整就有点难懂了,书里也没证明为什么那样做就能够保持性质(留做练习题了),虽然可以理解过程。比较好玩的一点是,比较上次写的二叉搜索树,随机插入1000000个结点是二叉搜索树高度为48(不稳定,很容易变到50+),而红黑树的高度为24(很稳定)!而log2(1000000) = 20,也可以说明红黑树的平衡性确实是比较好的!原创 2016-08-26 20:42:54 · 836 阅读 · 0 评论 -
在单链表上实现插入排序
问题:给单链表排序(升序排列,要保持稳定性),要求通过改变结点的next指针从而改变结点的位置,而不是只交换结点的值来使得其有序!时间复杂度为O(N^2),空间复杂度为O(1)。原创 2016-09-17 20:10:29 · 10013 阅读 · 2 评论 -
算法导论:二叉搜索树模板
今天看了算法导论的第12章《二叉搜索树》,觉得里面的过程的伪代码很精巧,过程讲解也很仔细易懂,所以就写下这个二叉搜索树模板。树类数据结构的关键操作是插入和删除,查找和遍历相对而言技巧性和难度一般吧。原创 2016-08-25 19:13:17 · 723 阅读 · 0 评论 -
C++四舍五入保留N位小数
最近遇到这个问题,不难吧,不过搜网上的东西,没看到比较合心水的答案,自己搞了两种做法,请君侧耳为我听。原创 2016-09-04 20:55:15 · 31689 阅读 · 12 评论 -
蛇形填数
顺时针将数字1,2,3,4,…,填入到给定大小的矩阵中原创 2016-04-09 20:12:55 · 601 阅读 · 0 评论 -
Google笔试:Watson and Intervals
这是今年(2016)google校招的笔试题(Round B的C题),难度比acm的低,但是也不简单。 题意:给你一堆区间,让你选择一个来去掉,使得剩下的区间覆盖到的整数点最少。原创 2016-08-30 13:04:10 · 1067 阅读 · 0 评论 -
平衡二叉树计算高度的同时判断是否平衡
今天一个朋友微软电话面试,问到一个问题,就是如题所述的,他问我他写的有没有错,挺难说的,然后我就随手写了一个版本(自我感觉良好)~原创 2016-04-13 23:59:36 · 1546 阅读 · 0 评论 -
找出数组里出现次数超过一半的数字
思路一:(map/哈希表)计数 小Y:啊,这个问题呀,很简单啊,我就给每个数字计数,最后看一下个数不就知道了吗? 我:那你想想“给每个数字计数”这个操作,是用什么数据结构来实现的呢? 小Y:C++里面的map呀…… 我:那你算算复杂度是多少 小Y:每个数字的平均查找复杂度是O(log N)(注,map是用红黑树实现的),那就是O(N log N)呗 我:那我排个序,原创 2016-03-28 23:57:33 · 1930 阅读 · 0 评论 -
二维有序矩阵的查找
二维有序矩阵的快速查找原创 2016-03-24 20:17:23 · 1652 阅读 · 0 评论 -
最大连续子数组和
问题描述:给定一个整数数组,元素的值有正有负。定义“连续子数组和”为连续几个数组的元素的和,求最大的连续子数组和。已知这个值在int能够表示的范围内。本文给出了两种比较容易理解的解法。原创 2016-04-06 00:42:52 · 411 阅读 · 0 评论 -
【编程珠玑】自己实现位向量类
最近开始看《编程珠玑》了,传说中的“看起来很眼熟啊,而过几分钟后又得出结论——以前从来没读过”,刚看了第一章的内容,作者思考问题的方式和角度确实很好,前言提示说不要看太快,习题要一道一道跟着做,自己做过再去看答案。这一章的内容是磁盘排序的问题,用了位向量优化了排序(其实跟计数排序的原理差不多,就是利用所有的关键字在一定的范围内,而这里的关键字还是没有重复的,弄一个位向量,遇到一个值就将它响应的位置置原创 2016-03-10 11:46:04 · 871 阅读 · 0 评论 -
无头指针单链表删除元素
问题描述:给定一个单链表的一个结点的指针Q,且该结点不是最后一个结点,请在O(1)时间内删除该节点。这个问题其实很有趣的,一开始摸不着头脑,然后想到了一个“李代桃僵”的方法,最后结合成为一个绝妙的步骤!!!原创 2016-04-01 19:25:07 · 1326 阅读 · 0 评论 -
【From牛客网】各厂笔试训练题目
声明:题目来源是牛客网,本人不对题目真实性负责,仅供参考、分享。提前体验各厂在线笔试编程题目原创 2016-04-01 14:00:51 · 1189 阅读 · 0 评论 -
【机器学习实战】KNN
KNN是比较简单且好用的算法。 读本篇博客之前,需要先对numpy、scikit-learn有个基本的了解,因为它们都是python做科学计算、机器学习必备的好工具!还有就是需要了解cross validation(交叉验证),可参考我的另外一片博客:交叉验证A. 算法原理KNN是个怎样的算法呢?其实顾名思义就能猜个七八成了,k-nearest-neighbors,邻居?首先假设我们有一个计算两个原创 2016-03-20 13:11:02 · 1181 阅读 · 1 评论 -
字典树Trie实战
问起起源于在学堂在线上的《软件工程》这门课,一般每章后面都会有一个实践作业,发现其难度可以比拟大一大二的课程大作业,早有这样的训练强度该有多好呢?呵呵O(∩_∩)O~A. 问题描述 以上是基础的要求,其实字符串的题目一般都可以随便暴力做,所以评价一个算法的优劣,主要是看它在特定应用场景下的效率,比如: 基于上面的要求,我决定使用“字典树”Trie来实现基于字符串的快速查找,字典树的描述请自行原创 2016-03-19 17:21:31 · 622 阅读 · 0 评论 -
KMP算法
KMP算法学习原创 2016-03-17 21:02:28 · 834 阅读 · 1 评论 -
【算法导论】手动实现堆
A. 堆的简介堆是一个很好用的数据结构,它即没有搜索二叉树那样严格(要求左子结点必须小于父结点,而右子结点必须不小于左子结点),但同时有可以毫不费力气地维护平衡的高度(实现过平衡二叉树的就知道,挺麻烦的)。堆可以按照它的性质分为最大堆(任意父结点不小于左右子结点)和最小堆(任意父结点不大于左右子结点),两种原理都是一样的,下面就最大堆来讨论。首先是堆的底层数据的结构,只用到了一个普通的数组!!!没错原创 2016-03-16 11:25:51 · 757 阅读 · 0 评论 -
旋转矩阵
旋转矩阵,笨方法 vs 新方法原创 2016-03-24 16:13:06 · 1132 阅读 · 1 评论 -
x & (x-1)的意义
它的意义是: x = x & (x-1)能够将x(二进制表示)的最右边的1变成0。原创 2016-03-26 20:07:46 · 1392 阅读 · 0 评论 -
广度优先搜索——经典的8数码问题
话不多说,直接贴代码吧~//广度搜索-8数码问题 #include #include using namespace std;const int Max = 8;const int All = 363000; //总的个数有9!= 362880,故取363000int Fac[Max] = {1}; //康托展开需要用到的工具 char a[All][9]; bool原创 2014-09-21 00:36:00 · 3901 阅读 · 0 评论 -
最近遇到的几个问题
os相关问题原创 2016-04-10 00:05:10 · 448 阅读 · 0 评论 -
二叉树的层次遍历
二叉树的层次遍历原创 2016-04-09 23:38:11 · 555 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。原创 2016-04-09 23:14:08 · 479 阅读 · 0 评论 -
最小栈
问题描述要求实现一个最小栈,除了经典的栈的各种功能外,要求能够在常数时间内获取当前栈里所有元素中的最小值。原创 2016-04-09 20:19:10 · 1292 阅读 · 0 评论