
数据结构与算法
文文文文文哥
...
展开
-
堆排序(java实现)
一、前言堆是一个数组,它可以看成近似的完全二叉树。表示堆的数组包括两个属性:A.length数组元素的个数,A.heapSize表示多少个元素存在数组中。这里的关系是: 0<= A.heapSize<=A.length树的根节点为A[1],堆排序的时间复杂度为O(nlgn)。二叉堆分为两种形式:最大堆和最小堆。最大堆是父节点>=子节点。最小堆即相反。下面用java实...原创 2018-02-10 11:20:04 · 207 阅读 · 0 评论 -
快速排序(java实现)
一、前言快速排序,听这个名字也知道这是一个性能比较好的排序算法。最坏情况下时间复杂度为O(n²),虽然最坏时间复杂度很差,但是快速排序通常是实际排序中最好的选择,因为它平均性能最好:它的期望时间复杂度O(nlgn),而且隐含的常数因子非常小。快速排序主要利用二、实现整个实现思路可以这样理解:①找到一个基准,例如将最后一个元素当做基准②从第一个元素依次和基准比较,如果小于基准则不动,...原创 2018-02-11 14:53:01 · 929 阅读 · 0 评论 -
每日算法之丑数
描述设计一个算法,找出只含素因子2,3,5 的第 n 小的数。(我们可以认为1也是一个丑数)符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12…实现 /** * @param n: An integer * @return: the nth prime number as description. */ pub...原创 2018-04-08 16:11:51 · 497 阅读 · 0 评论 -
每日算法之a+b和尾部零的算法
一、a+b问题a=1,b=2,不使用加减乘除,来实现a+b的效果。(可以使用位操作符)算法思路: ①1+1=0,0+0=0,1+0=1,可以看出和异或产生的效果类似。 ②上面的加法虽然可以用异或来实现,但是还有1+1的进位问题,可以用另一种方式解决,比方说:1+1=0,可以通过1&1,为0,同时,将其左移一位即可获取进位。 ③接着就是将①和②的结果加起来即可。 pub...原创 2018-04-06 18:35:05 · 322 阅读 · 0 评论 -
每日算法之统计数字
题目要求计算数字k在0到n中的出现的次数,k可能是0~9的一个值。例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)代码实现:public int digitCounts(int k, int n) { int count = 0; f...原创 2018-04-07 10:22:06 · 381 阅读 · 0 评论