数据结构与算法
黑色眼睛90
这个作者很懒,什么都没留下…
展开
-
埃氏筛法 求素数
埃氏筛法素数就是除了1和本身之外没有其他的约数,所以有约数的都不是素数。思路:先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,……依此类推,最后剩下的就是素数。 如求100以内的素数,我们只要到去掉Math.aqrt(100)的倍数就可以了,这是因为10的2倍已经被2的倍数去掉了,10的3倍已经被3的倍数去掉了,所以到10的时候只剩下10的10倍以上的素数还存在。 同样的原因,我们在去掉3的倍数原创 2015-04-28 15:47:34 · 5914 阅读 · 0 评论 -
从上往下打印二叉树
题目题目:从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印思路如果没有想到使用容器,这个题很难往下做。 如果使用容器的话:先打印根节点的值,然后把它的两个子节点放入容器中,先取出左节点,打印其值,然后把它的两个节点放入容器,再打印右节点,再把它的两个节点放入容器,依次类推。。java代码package com.co;import java.util.LinkedList;class原创 2015-05-15 14:41:48 · 434 阅读 · 0 评论 -
二叉树镜像
题目题目:输入一个二叉树,输出该二叉树的镜像思路先序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换他的子节点java代码package com.cv;//定义结点class Node{ int value; Node leftTree; Node rightTree; public Node(){} public Node(int value){原创 2015-05-12 19:52:18 · 401 阅读 · 0 评论 -
重建二叉树
题目题目:已知某二叉树的前序遍历序列与中序便利序列,请重建该二叉树。假设前序遍历序列与中序遍历序列的结果中不包含重复数字。 前序遍历序列:{1,2,4,7,3,5,6,8} 中序遍历序列:{4,7,2,1,5,3,8,6}思路前序遍历就是:根节点——>左子树——>右子树,所以我们可以知道前序遍历序列中的第一个元素就是根节点root 中序遍历就是:左子树——>根节点——>右子树,由于在前序遍历序原创 2015-05-11 21:48:26 · 399 阅读 · 0 评论 -
【leetcode】——从两个有序数组中寻找他们并集的第k小元素
题目题目:There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log(m + n)).两个排好序的数组A,B,大小分别为m,n,找到两个数组中所有元素原创 2015-05-09 11:17:20 · 6489 阅读 · 0 评论 -
二分查找2
题目1题目:一个已排好序的数组,在某个点被旋转,如:{0,1,2,3,5,6,7}变为{5,6,7,0,1,2,3} 从被旋转后的数组中查找某个数是否存在按照二分查找的思路做,mid = (start + end)/2,如果a[start] < a[mid],说明前半部分元素是递增的,否则说明后半部分元素是递增的,然后判断目标元素在哪个区间,递归查找。题目2题目:同题目1相同,只是已排好序数组中允原创 2015-05-07 22:36:24 · 388 阅读 · 0 评论 -
删除已排序数组中的重复元素
题目1题目:删除数组中重复的元素,数组是排好序的,使所有的元素都只出现一次,如{1,1,2,3}变为{1,2,3},不允许申请额外的数组。时间复杂度:O(n) 空间复杂度:O(1)思路比较难表达清楚,其实只要画个图就很好理解,前后两个索引 index 与 i,只要出现重复元素index就呆在原地不动,i继续往前走,index与i之间的元素都是重复的元素。package com.cn;public原创 2015-05-07 22:15:43 · 1023 阅读 · 0 评论 -
顺时针打印矩阵
题目【剑指offer,面试题20】题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。思路看着比较简单的一道题目,但是想起来比较费劲,剑指offer上面的解题过程没看懂,以下思路借鉴自【算法06】顺时针打印矩阵首先矩阵不一定是方阵,所以按照对角线的思路是不可行的一个矩阵,给定起点(startX,startY)和终点(endX,endY)(即位于对角线上的两个点)就可以打印一周,然后向里原创 2015-05-05 22:32:40 · 337 阅读 · 0 评论 -
最优二叉检索树
题目给定数据集 S = < x1 , x2 , …, xn>, 及S 的存取概率分布如下: P = < a0 , b1 , a1 , b2 , a2 , … , bn, an > 求一棵最优的( 即平均比较次数最少的)二分检索树.动态规划思路令w[i,j]是P[i,j]中所有概率(数据与空隙)之和 设m[i,j] 是相对于输入S[i,j] 和P[i,j] 的最优二叉搜索树的平均比较次数原创 2015-05-05 10:01:32 · 1336 阅读 · 0 评论 -
处理二叉检索树的遍历序列
概念普及二叉树:每个节点都不能有多于两个的儿子 二叉检索树:对于树中的每个节点X,左子树中所有关键字的值小于X的值,右子树中所有关键字的值大于X的值 前序遍历:根节点——>左子树——>右子树 后序遍历:左子树——>右子树——>根节点 中序遍历:左子树——>根节点——>右子树前序遍历的结果:20,15,10,12,18,25,30 后序遍历的结果:12,10,18,15,30,25,20原创 2015-05-04 19:39:05 · 484 阅读 · 0 评论 -
二分查找
一直以为二分查找很简单,,但是真写的时候半个小时都没写对。二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。二分查找的一个条件是待查询的数组是有序的,我们假设这里的数组是升序的。二分查找的主要思路就是设定两个指针start和end分别指向数组元素的收尾两端,然后比较数组中间结点arry[mid]和待查找元素。如果待查找元素小于中间元素,那么表明带查找元素在数组的前半段原创 2015-04-28 22:28:49 · 518 阅读 · 0 评论 -
背包问题
题目一个旅行者随身携带一个背包. 可以放入背包的物品有n 种, 每种物品的重量和价值分别为 wi , vi . 如果背包的最大重量限制是 b, 每种物品可以放多个. 怎样选择放入背包的物品以使得背包的价值最大 ? 不妨设上述 wi , vi , b 都是正整数.原创 2015-04-24 22:21:26 · 821 阅读 · 0 评论 -
动态规划
基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太原创 2015-04-24 10:43:52 · 333 阅读 · 0 评论 -
二叉树的三种遍历方法(递归)
package com.cs;//定义节点class Node{ int value; Node leftTree; Node rightTree; public Node(int value){ this.value = value; } }public class TraversalTwoForkTree { public s原创 2015-05-15 22:14:28 · 577 阅读 · 0 评论 -
排序算法
寒小阳目录视图摘要视图订阅 找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用分类: 笔试面试基础知识 算法那些事儿2013-09-29 16:54 9366人阅读 评论(10) 收藏 举报12种排序算法原理代码图解flash视频对应笔试面转载 2015-07-22 10:38:10 · 1774 阅读 · 0 评论 -
二叉树中和为某一路径的值
题目题目:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。路径是从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。注意:路径必须是从根节点开始一直到叶节点才可以。。。刚开始一直没有注意到这一点。。思路打印出二叉树中节点值的和为输入整数的所有路径,当访问到叶节点的时候,我们不知道前面经了哪些节点,因此我们需要一个集合来存储经过的节点,(该集合必须是先进后出)路径必须是从原创 2015-05-15 21:52:58 · 996 阅读 · 0 评论 -
快速排序
基本思想用首元素 x 作划分标准,将输入数组 A划分成不超过 x 的元素构成的数组 AL,大于 x 的元素构成的数组 AR. 其中 AL, AR从左到右存放在数组 A 的位置。递归地对子问题 AL和 AR 进行排序,直到子问题规模为 1 时停止.划分过程:用首元素作为基准,从后往前找第一个比首元素小的元素,找到后停止,然后从前向后找第一个比首元素大的元素,然后将大元素与小元素做交换,最后返回划分的位原创 2015-05-20 10:23:11 · 340 阅读 · 0 评论 -
对公司所有员工的年龄排序
思路这道题其实与埃氏筛法 求素数 所用的思想是相同的,都是选取一个数组用来做标记,牺牲空间换取时间如果给定一组数,要求判定这组数中哪些数是素数,则只需要根据埃氏筛法,判断该数的标记数组是true还是false即可。java代码:要求:时间复杂度O(n),只允许使用常量大小的辅助空间package com.me;import java.util.Arrays;public class AgeSort原创 2015-05-20 11:16:43 · 978 阅读 · 0 评论 -
哈夫曼树
概念哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+…+Wn*Ln),N个权值Wi(i=1,2,…n)构成一棵有N个叶结点的二叉树,相应的叶结原创 2015-05-21 21:51:05 · 395 阅读 · 0 评论 -
二分归并排序
二分归并排序归并排序建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 将两个有序序列,合并成一个新的有序序列,分别取两个有序序列的最小值,将两个最小值比较,取最小最坏情况下时间复杂度:O(nlogn) 平均情况下时间复杂度:O(nlo原创 2015-05-22 20:30:45 · 3918 阅读 · 0 评论 -
哈夫曼编码
概念哈夫曼树可用于构造代码总长度最短的编码方案。具体构造方法如下:设需要编码的字符集合为{d1,d2,…,dn},各个字符在电文中出现的次数集合为{w1,w2,…,wn},以d1,d2,…,dn作为叶结点,以w1,w2,…,wn作为各叶结点的权值构造一棵二叉树,规定哈夫曼树中的左分支为0,右分支为1,则从根结点到每个叶结点所经过的分支对应的0和1组成的序列便为该结点对应字符的编码。这样的代码总长度最原创 2015-05-22 15:56:52 · 581 阅读 · 0 评论 -
选择问题(选最大,选最小,选第k小)
选择问题:一个含有n个不相等实数的集合,输出集合中的第i小元素如果i=1,则为寻找最小元素 如果i=n,则为寻找最大元素 如果i处在集合序列的中间,则为寻找中位数选最大算法:顺序比较,首先假定第一个元素为最大,接着最大元素与第二个元素比较,若最大元素小于第二个元素,则两者交换,否则继续与第三个元素比较最多需要做n-1次比较运算 最坏情况下时间复杂度:W(n)= n-1选最大最小同时求最大元素与原创 2015-05-08 22:20:19 · 1871 阅读 · 0 评论 -
青蛙跳台阶
题目描述:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。解题思路:这是一道典型的用递归求解的题目。 我们可以这样考虑问题:1.当只有一级台阶时,那么只有一种跳法;2.当有两级台阶时,那么就会有两种跳法:一次跳一级跳两次或一次跳两级。3.当n>2时,那么我们就以用第一次跳时就可以跳一级或者两级,,如果第一次跳一级,那跳法数目就等于后面n-1阶台阶的原创 2015-05-23 15:01:14 · 436 阅读 · 0 评论 -
华为机试——两个超长正整数的加法
题目描述:请设计一个算法完成两个超长正整数的加法。 要求实现函数: void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);输入参数: char * pcAddend:加数 char * pcAugend:被加数 c原创 2015-08-02 17:28:34 · 2540 阅读 · 0 评论 -
笨笨熊搬家——交通(java)-2
笨笨熊搬家问题之——记录最短路径上一篇文章中,我们判断了地图上的两点之间是否可达,并没有记录两点之间的最短路径问题而且上一篇的代码中,经过一个位置之后,将该位置标记为走过(mark[i][j] = true),但是在Search()函数返回之后,并没有重新将该位置标记为未走过,这样就导致该位置如果走过一次,以后别的位置就不可到大该位置。这一篇文章:记录笨笨熊搬家之最短路径java代原创 2015-08-16 14:32:06 · 959 阅读 · 0 评论 -
笨笨熊搬家——交通(java)
题目描述:森林里的苯苯熊要乔迁新喜,上次他已经将物品打包完成,并约了朋友来帮忙。接下来他要选定一个搬家的时间,想了很久,就决定在国庆节进行,因为国庆放假朋友们都有时间啦。但是在森林里,从他现在房子到新豪宅,所经之地有山有水,路途曲折,甚至有些道路是不通的。 请你和他一起查看指定的地图,看看从笨笨熊现在的房子到新宅之间,道路是否是畅通的呢? 地图是R行、C列的矩阵,矩阵的每一原创 2015-08-15 23:05:46 · 1068 阅读 · 2 评论 -
基数排序
点击打开链接http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html编程论到极致,核心非代码,即思想。所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。其实,我们大多数人都活在“默转载 2015-07-29 10:06:06 · 387 阅读 · 0 评论 -
矩阵链相乘(递归、动态规划解法)
题目描述有若干个矩阵{Ai},元素都为整数且已知矩阵大小。 如果要计算所有矩阵的乘积A1 * A2 * A3 .. Am,最少要多少次整数乘法?输入 第一行一个整数n(n <= 100),表示一共有n-1个矩阵。 第二行n个整数B1, B2, B3… Bn(Bi <= 100),第i个数Bi表示第i个矩阵的行数和第i-1个矩阵的列数。 等价地,可以认为第j个矩阵Aj(1 <= j <= n原创 2015-04-16 22:45:16 · 2553 阅读 · 0 评论