数据结构和算法
文章平均质量分 74
xiaerwoailuo
这个作者很懒,什么都没留下…
展开
-
《剑指offer》-用两个栈实现队列
题目:用两个栈实现一个队列,完成在队尾插入结点和在队头删除结点的功能。 实在不知道该怎么写。。。。。。只能按照书上给的代码改成java版本的了,哈哈哈……机智如我import java.util.Stack;public class CQueue { public static Stack<Integer> stack1 = new Stack<Integer>(); public原创 2017-04-05 19:17:33 · 399 阅读 · 0 评论 -
常见数据结构小知识点总结
1.循环队列 初始化建空队时,令front=rear=0, 当队空时:front=rear 当队满时:front=rear 亦成立 因此只凭等式front=rear无法判断队空还是队满。 有两种方法处理上述问题: (1)另设一个标志位以区别队列是空还是满。 (2)少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位置上”作为队列“满”状态的标志。即: 队空时原创 2017-04-06 21:20:14 · 384 阅读 · 0 评论 -
《剑指offer》006-重建二叉树
题目:输入前序和中序,重建二叉树。(假设前序和中序不含重复数字)。原创 2017-03-21 10:01:22 · 283 阅读 · 0 评论 -
二叉树的遍历-先序中序后序层次(java实现)
二叉树的结构原创 2017-03-03 16:43:49 · 333 阅读 · 0 评论 -
LCS-最长公共子序列
最长公共子串(Longest Common Subsequence,LCS),子序列和子串的区别:子串是连续的一段。 蛮力法(对s的每一个子序列,检查是否为t的子序列,s有2^m个子序列,t有2^n个子序列,s长度为m,t长度为n) 时间复杂度为O(2^n * 2^m)。 动态规划法(自顶向下)时间复杂度和空间复杂度都是O(m*n) (最优子结构的意思是全局最优解包含局部最优解,问题能够分解原创 2017-03-31 16:34:32 · 598 阅读 · 0 评论 -
Josephu(约瑟夫)问题(java版本)
声明:整理的学习版本,并非本人成果。Josephu问题为:设编号为1,2,……,n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,他的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列。 提示:用一个不带头结点的循环链表来处理Josephu问题,先构成一个有n个结点的单循环链表,,然后由k结点起从1开始原创 2017-03-13 14:02:44 · 1257 阅读 · 1 评论 -
《剑指offer》002-实现Singleton模式(java实现)
《剑指offer》002-实现Singleton模式一、加载类时就初始化此实例public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ retu原创 2016-11-16 20:55:33 · 469 阅读 · 0 评论 -
排序总结(java版本)
本文总结的排序算法有简单选择排序、直接插入排序、冒泡排序、希尔排序、快速排序、堆排序、归并排序,桶排序,基数排序。 简单选择排序private void selectSort(int[] nums){ for(int i = 0; i < nums.length-1; i++){ int index = i; for(int j =原创 2017-03-09 15:34:18 · 714 阅读 · 0 评论 -
《剑指offer》003-二维数组中的查找
《剑指offer》003-二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该函数。 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1 输入的第二行包括一个整数t(1 接下来的m行,每行有n个数,代表题原创 2017-02-20 22:12:54 · 404 阅读 · 0 评论 -
《剑指offer》004-替换空格(java实现)
题目: 请实现一个函数,把字符串中的每个空格替换成“%20”例如输入“We are happy.”,则输出“We%20are%happy.”。 在网络编程中,如果URL参数中含有特殊字符,一般将特殊字符转换成’%’后面跟上ASCII码的两位十六进制的表示。空格的ASCII码是32,十六进制是ox20,’#’的ASCII码是35,十六进制是ox23。原创 2017-02-21 10:40:13 · 409 阅读 · 0 评论 -
《剑指offer》005-从尾到头打印链表
代码:import java.util.Stack; class ListNode{ int val; ListNode next; ListNode(int i){ this.val = i; } } public class ReversePrint{ public static void main(String[] args){原创 2017-03-21 09:49:14 · 283 阅读 · 0 评论 -
深度优先遍历/广度优先遍历(递归+非递归java实现)
二叉树的最大深度 深度优先遍历原创 2017-03-01 16:04:05 · 3706 阅读 · 6 评论 -
二分查找递归和非递归(java实现)
public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = new int[] { 12, 23, 34, 45, 56, 67, 77, 89, 90 }; Syste原创 2017-03-02 16:54:20 · 656 阅读 · 0 评论 -
罗马数字和十进制数转换(java版本)
七个罗马字母:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000) 1.将十进制数(0-3999)转换成罗马数字 public class Solution{ public static void main(String[] args){ System.out.println(intToRoman(2344)); ...原创 2017-03-06 20:12:31 · 1369 阅读 · 2 评论