
算法
低调小一
Ubuntu重度患者,曾经的服务器开发工程师,如今正在深入学习到Android Framework
展开
-
bitmap算法
概述所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素。由于采用bit为单位来存储数据,因此在可以大大的节省存储空间算法思想32位机器上,一个整形,比如int a;在内存中占32bit,可以用对应的32个bit位来表示十进制的0-31个数,bitmap算法利用这种思想处理大量数据的排序与查询优点:效率高,不许进原创 2013-07-26 14:23:38 · 2129 阅读 · 3 评论 -
Hanoi Tower问题分析
前言回家休息第3天了,状态一直不是太好,主要是要补牙,检查身体,见同学见亲戚,心里又着急校招,难得能腾出时间来好好思考,这里也是看,看到了汉诺塔问题,这里记录一下思路分析汉诺塔是递归的经典题目,这里先介绍使用递归的关键:使用递归的一个关键就是:我们先定义一个函数,不要着急去实现它,但是要明确它的功能对于汉诺塔问题,我们定义如下函数原型:voi原创 2013-08-07 23:21:19 · 4028 阅读 · 0 评论 -
fibonacci数列
原文链接解决了我一直没能理解的矩阵求fibonacci的困惑,原文链接:http://hawstein.com/posts/8.1.html题目写一个函数来产生第n个fibonacci数解答fibonacci数列的定义如下:f(1) = f(2) = 1;f(n) = f(n - 1) + f(n - 2);根据递推公式,我们很容易写出递归和非转载 2013-09-03 11:52:37 · 1808 阅读 · 0 评论 -
卡特兰数
前言最近博客我都不好意思写了,都是笔试的一些知识点,而且都是草草了事,不过我在这里保证,找到工作后我会重新回来完善这时写的bolg,对得起自己,对得起观众卡特兰数一个栈(无穷大)进栈序列是1,2,3,4,5,...,n,有多少不同的出栈序列?解答:c(n, 2n) / (n + 1)原创 2013-09-11 14:40:32 · 1560 阅读 · 1 评论 -
八皇后问题
前言我做八皇后的题目是利用了字符串全排列的思想,递归+回溯,需要再理解全排列作为前提,没理解的同学可以参考这个链接:http://blog.youkuaiyun.com/zinss26914/article/details/8939140题目题目描述:会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被原创 2013-05-18 23:12:20 · 2701 阅读 · 1 评论 -
字符串全排列算法
前言字符串的排列组合问题,困扰了我好久,递归的思想我今天一定要掌握,擦,话不多说,博客走起!问题输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba思路这是典型的递归求解问题,递归算法有四个特性:必须有可达到的终止条件,否则程序陷入死循环子问原创 2013-05-17 15:15:24 · 23473 阅读 · 5 评论 -
分解质因数
前言之前就想写一篇关于分解质因数的文章,原因也是九度oj上有几道跟质因数分解有关的题目没有思路,这次找完工作学java的同时进行一些查缺补漏原理&&方法把一个合数分解为若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数,分解质因数只针对合数求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式的叫短除法,和除法的性质差不多,还原创 2013-11-19 13:47:28 · 5525 阅读 · 0 评论 -
最长递增子序列
概述最长递增子序列(Longest Increasing Subsequence)长度有很多种解决方法,这里介绍两种,一种是动态规划的实现,一种是O(NlogN)的解决方法(参考编程之美)动态规划我们假定w1,w2,...,wn为一串正整数序列,前i个数的最长递增子序列的长度为A(i),则最优解结构为:A(1) = 0A(i) = max{max{A(j)原创 2013-07-08 19:40:07 · 3673 阅读 · 1 评论 -
字符串组合算法
全组合例如给定字符串“abc”,全组合意思从中去0个元素,1个元素,一直到n个元素,介绍二进制做法。以字符串“abc”为例:000 NULL001 c010 b011 bc100 a101 ac110 ab111 abc思路出来了,代码也比较好写,分享一下我的代码:/** * Write a method that returns原创 2013-09-25 15:56:21 · 3377 阅读 · 5 评论 -
排列算法——字典序法
前言LeetCode上确实有不少全排列的题目,之前介绍了一种递归的解法,链接见:字符串全排列算法这里介绍一种字典序方法字典序法对给定的字符集中的字符规定一个先后关系,在此基础上按照顺序依次产生每个排列。例如字符集{1,2,3},按照字典序生成的全排列是:123,132,213,231,312,321参考示例:算原创 2014-02-06 12:27:18 · 3370 阅读 · 0 评论 -
双色球算法
前言首先说明一下,博主是没有能力预测双色球的,只是看最近支付宝、京东等客户端均有随机选彩票(双色球)的功能,想着模拟实现一下这个随机选号的算法。之前看到有人说博主比较乐观,都是咬牙坚持的,博主也各种屌死,各种幻想,例如中了双色球一等奖开着宝马去阿里写代码,哈哈,我还是挺喜欢写代码的。(ps:真蛋疼,大论文还没写完,在这里搞神马双色球啊)双色球随机算法思路最近原创 2014-04-20 12:17:59 · 16604 阅读 · 4 评论 -
LRU算法&&LeetCode解题报告
题目Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.get(key) - Get the value (will always be positive) of the key原创 2014-06-23 00:56:51 · 4406 阅读 · 1 评论 -
《算法4》——补全左括号的问题
题目在完成《算法》课后题目的过程中,遇到一道题目内容如下:编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )你的程序应该输出:((1 + 2) * ((3 - 4) * (5 - 6)))思路开始感觉这个题目就有点类似求四则表达式的题目,也就是所谓的双栈法。 双栈法的原理如下:1.原创 2016-01-17 17:28:57 · 6051 阅读 · 6 评论 -
快速排序
1.起因今天在acm刷题的时候,之前的排序算法一直都是冒泡,可能九度OJ的难度题考察的都是快速排序,导致我都是死在time limited上,因此我下决心要学习一下快速排序,心得跟大家进行分享!2.算法思想快速排序采用了一种分治策略,我感觉它就是归并排序的优化,学术上称之为分治法(Divide-and-ConquerMethod)(1)分治的基本思想:将原问题分原创 2012-10-06 14:50:32 · 7292 阅读 · 4 评论 -
01背包、完全背包、多重背包
前言今天花了一下午加一晚上的时间,在九度oj才ac了一道简单的多重背包题目,之前没做过多重背包的题目,导致我做题时复杂化了,虽然是假期但是也不能这么浪费时间,果断总结一下,这里参考了dd_engi大牛的《背包问题九讲》,原文链接:http://love-oriented.com/pack/01背包题目有N件物品和一个容量为V的背包。第i建物品的费用是c[i],价值是原创 2013-10-04 15:03:19 · 34862 阅读 · 4 评论 -
归并排序
前言目前我掌握的排序算法有冒泡排序、插入排序、堆排序、快速排序,这几个排序算法的过程和思想包括时间复杂度我都能快速的讲出个1234来,唯独对归并排序理解的不够深入,这里重新学习一下归并排序分治思想将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解建立原问题的解,归并排序完全遵循分治模式:分解:分解待排序的n个元素的序列成原创 2013-05-31 11:36:22 · 2304 阅读 · 1 评论 -
首尾相连数组的最大子数组和
前言这是昨晚参加九度oj的7月份月赛碰到的题目,很有意思,今早查了一下,原来《编程之美》中已经讲过类似题目,看来我把《剑指offer》看完之后,下一本书就是《编程之美》了,今天6点起床想看会英语,可惜还是搞算法了题目题目描述:给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存原创 2013-07-22 09:27:49 · 4449 阅读 · 2 评论 -
对称子字符串最大长度
前言之前写了一篇文章,判断回文字串,见链接:http://blog.youkuaiyun.com/zinss26914/article/details/8063753, 确实写的够烂,欢迎吐槽。这次分享一个在O(n * n)时间复杂度内求对称字符串最大长度的代码判断回文子串先重写一个判断回文字串的方法,用指针实现,而不是数组了原创 2013-07-18 17:35:07 · 2702 阅读 · 0 评论 -
c语言调用库函数qsort()进行快速排序
前言各种排序方法中,例如冒泡、插入,快排等我最喜欢用快速排序,特别欣赏快排的分治思想,调用系统的qsort函数前希望大家也能了解一下快速排序的原理,参考链接见:http://blog.youkuaiyun.com/zinss26914/article/details/8043168qsort函数原型void qsort(void *base, size_t nmemb, size_t si原创 2013-01-26 18:20:42 · 13894 阅读 · 6 评论 -
数组中的数只出现一次
前言中午在微薄上看道了九度的这道题,把题目先贴出来,分享一下我的解题思路吧题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2<=n <= 10^6。第二行包含n个整数,表示数组元素,元素均为int。输出:对应每个测试案例,输出数组中只出现一次的两个数。原创 2013-01-29 14:59:05 · 2148 阅读 · 0 评论 -
星期几问题——蔡勒公式
前言这篇博客主要是参考网上的一个帖子,然后自己推断验证,在原创和转载之间犹豫了很久,鉴于我确实做了很多推导工作,姑且就认为我是原创吧!简介星期制度星期制度是一种古老的制度。据说因为《圣经×创世纪》中规定上帝用六天的时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期天是休息日。求星期几的思路原点差值取余法首先,先要知道在原创 2013-01-30 11:08:51 · 4478 阅读 · 2 评论 -
贪心算法
引言事先声明,我学习贪心算法之前只是理解了动态规划的装配线调度问题,其它的动态规划基础基本为零,我感觉很多问题都可以用贪心来解决,因此在这里总结一下我学习贪心算法的过程,很多东西是靠做题和死记硬背理解的,唉,为自己的智商着急啊!我采用通过acm题的方式来分析一下我理解的贪心算法!例题题目描述:又到毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完原创 2013-02-13 15:25:55 · 2078 阅读 · 0 评论 -
最大公约数&&最小公倍数
前言整理之前的博客,在求最大公约数的基础上增加了求最小公倍数最大公约数思路采用欧几里得的辗转相除法即可题目题目描述:输入两个正整数,求其最大公约数。输入:测试数据有多组,每组输入两个正整数。输出:对于每组输入,请输出其最大公约数。样例输入:49 14样例输出:7ac代码#include #include int原创 2012-10-14 17:33:01 · 2367 阅读 · 1 评论 -
To Fill or Not to Fill (九度贪心题目)
前言由于是周末,这道九度贪心算法的题目进行了整整两天的时间,挺不错的,这里分析记录一下题目题目描述:With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to原创 2013-02-24 18:16:14 · 3841 阅读 · 1 评论 -
堆排序
堆排序概述堆排序定义n个关键字序列k(1), k(2), ..., k(n)称为堆,当且仅当该序列满足如下性质(简称为堆性质)k(i) k(i) >= k(2i) && k(i) >= k(2i+1)若将此序列所存储的向量R[1..n]看做是一颗完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在原创 2013-02-25 23:28:41 · 2301 阅读 · 0 评论 -
哈夫曼树
前言学习贪心算法的时候复习了一下哈夫曼树的构造,这里记录一下,参考链接:http://blog.youkuaiyun.com/zinss26914/article/details/8461596主要是记录一道九度的哈夫曼树的题目题目题目描述:哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所原创 2013-02-17 23:46:34 · 2301 阅读 · 1 评论 -
搬水果(九度oj)
前言这道题耗时将近半个月,期间我复习了几处基础知识贪心算法堆排序哈夫曼树最后在参考我同学的博客,终于通过最小堆构建最小优先级队列ac了这道题!优先级队列参考链接:http://blog.youkuaiyun.com/zinss26914/article/details/8614022推荐一下我同学的博客,内容很好而且人也很犀利 : http://blog.csd原创 2013-02-26 15:36:08 · 1677 阅读 · 0 评论 -
对称平方数
题目题目描述:打印所有不超过n(n<256)的,其平方具有对称性质的数。如11*11=121输入:无任何输入数据输出:输出具有题目要求的性质的数。如果输出数据不止一组,各组数据之间以回车隔开。样例输入:样例输出:思路比较数组的数据是否满足对称的性质对整数取余求每一位数AC代码(c)#include #include int ju原创 2013-02-27 15:02:35 · 2042 阅读 · 0 评论 -
字符串匹配
概述字符串T = abcabaabaadac, 字符串P = abaa,判断P是否是T的子串,就是字符串匹配问题了,T叫做文本(Text),P叫做模式(Pattern).字符串匹配的用处非常多,例如经常使用的全文查找功能,Ctrl + f,用的就是字符串匹配算法。模式P在文本T中出现一次,在位移s = 3处。如果用最朴素的匹配算法,可以解决,两个for循环即原创 2012-12-14 16:38:58 · 2401 阅读 · 4 评论 -
0-1背包问题
前言0-1背包问题,动态规划的经典题目,在九度oj上ac将近230道题目后感觉还是动态规划的题目最具有挑战性,因为每个题目你都需要自己描述最优解的结构,自己去递归定义最优解。这个很有难度,但是征服有难度的题目本身就是对自己的提高!问题描述我们有n种物品,物品j的重量为wj,价格为pj。我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W。如果限定每种物品只能选择0原创 2013-06-02 23:52:54 · 1818 阅读 · 0 评论 -
三分搜索算法
前言今天本来应该看《信息检索导论》的,但是早上在九度oj做题目的时候碰到一个很有意思的题目,需要用到三分搜索算法。大家都知道二分搜索算法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。但当函数具有凹凸性时,二分搜索就无法使用了(当然可以先排序),这里介绍一种新的方法,三分查找算法,适应的函数图形如下:算法思想1. 与二分查找算法类似,先取整个区间的中间原创 2013-06-11 16:58:11 · 9812 阅读 · 3 评论 -
2路插入排序算法
前言今天给实验室的几个师妹讲解2路-插入排序算法,在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间。难点可能在于对取余的考虑吧,可以把辅助数组看成一个环状空间,这样就能更好的理解辅助空间中最大值和最小值的位置了再说一下,网上的很多2路插入排序代码错误百出,我都在想,这些贴出代码的人有没有实际运行过啊思原创 2013-06-13 21:52:17 · 5876 阅读 · 5 评论 -
动态规划
动态规划算法基本概念动态规划的过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划基本思想和策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题阶段,按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决原创 2013-03-22 23:59:50 · 2085 阅读 · 2 评论 -
最大连续子序列乘积
前言虽然今天是周六,本来应该写论文开题报告的,无奈实在是项目太工程了,可写东西不多,所以来九度oj做下题目缓解一下心情,最大连续子序列乘积是典型的动态规划题目,据说小米2013年校园招聘笔试考过,这里记录一下题目题目描述:给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。输入:输入可能包含多个测试样例。每个测试样例的第一行仅包含正整数 n(n<=原创 2013-07-13 18:13:09 · 14270 阅读 · 9 评论 -
Java面试题目-单链表翻转(递归+非递归实现)
前言个人在最近2年一直担任一面面试官,平时长问的题目就是单链表的翻转。发现很多面试同学只知道非递归实现,提到递归实现都是一脸懵逼。这里普及一下具体实现方案。链表数据结构我们这里就定义一个最简单的单链表:class Node { Node next; int val;}非递归public static Node reverseNode(Node head) { if (head...原创 2019-07-04 11:32:55 · 1012 阅读 · 2 评论