
数据结构与算法
hjiam2
渴望成为一名码农,爱生活,爱运动,爱编程
展开
-
用两个队列实现一个栈
上一篇文章我讲述了用两个栈实现一个队列,这一篇讲述用两个队列实现一个栈。题目:用两个栈实现一个队列,实现两个函数appendTop和deleteHead,分别完成在栈顶插入元素和弹出一个栈顶元素。实现过程:将queue1作为主队列,每次将插入的数据放在queue1的队尾。当执行deleteTop时,先判断queue1是否为空,若为空,则返回错误信息。否则,将queue1中除了队尾的元素全都原创 2013-11-27 12:39:23 · 763 阅读 · 0 评论 -
【Leetcode】Scramble String
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.Below is one possible representation of s1 = "great": great / \ gr原创 2014-04-14 17:14:29 · 896 阅读 · 0 评论 -
堆排序的实现
#include#includeusing namespace std;void min_heapify(int a[],int i,int size){ int l = i * 2 + 1; int r = i * 2 +2; int min; if(l a[l]) min = l; else min = i; if(ra[r]) min =r; if(mi原创 2014-04-13 13:24:46 · 796 阅读 · 0 评论 -
冒泡排序的三种实现
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码:[cpp]转载 2014-04-13 13:53:44 · 633 阅读 · 0 评论 -
归并排序的实现
归并排序的实现原创 2014-04-13 14:46:16 · 875 阅读 · 0 评论 -
插入排序的实现
#includeusing namespace std;void insertSort(int a[],int n){ for(int i=1;i<n;i++) { int key = a[i]; for(int j=0;j < i;j++) { if(key<=a[j]) { for(int k=i-1;k>=j;k--) a[k+1]=a原创 2014-04-14 00:02:38 · 781 阅读 · 0 评论 -
Dijkstra算法(Java实现)
Dijkstra提出按各顶点与源点v间的路径长度的递增次序,生成到各顶点的最短路径的算法。即先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从源点v 到其它各顶点的最短路径全部求出为止。下面是代码实现:package com.algorithm.impl;public class Dijkstra { private static int M = 10原创 2014-07-23 23:18:28 · 1342 阅读 · 0 评论 -
Java实现单链表反转
本文主要介绍单链表反转的两种方法,记录如下:1.package com.leetcode;public class ListReverse { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node原创 2014-09-01 12:47:50 · 1128 阅读 · 0 评论 -
Java实现字符串的全排列
package com.leetcode;import java.util.ArrayList;public class Permutation { public static void main(String[] args) { ArrayList res = perms2("abc"); System.out.println(res); } //法一: publ原创 2014-09-01 21:13:38 · 1108 阅读 · 0 评论 -
【Leetcode】Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.Return a deep copy of the list.题意:存在一个链表,里面有两个指针,一个指针指向下一节点,另原创 2014-04-14 15:38:21 · 1586 阅读 · 0 评论 -
轻松搞定面试中的二叉树题目
版权所有,转载请注明出处,谢谢!http://blog.youkuaiyun.com/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树转载 2013-12-20 19:57:42 · 612 阅读 · 0 评论 -
【Leetcode】Unique Binary Search Trees II
给定结点数n,结点值为1,2,...,n,求由这些结点可以构成的所有二叉查找树。Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.For example,Given n = 3, your program should return all转载 2013-11-14 11:38:06 · 900 阅读 · 0 评论 -
根据二叉树的前序遍历和中序遍历重建二叉树
在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。中序遍历序列中,根节点的值位于序列的中间,左子树的结点位于序列的左边,右子树的结点位于序列的右边。所以要扫描中序遍历序列,得到根节点的位置。在中序遍历序列找到根节点的位置后,则根节点左边的序列为左子树的结点,右子树的结点位于根节点的右边序列。此时将左右子树的大小l_size和r_size记录下来。在前序遍历序列中,左子树结点即为根节点之后原创 2013-11-27 11:11:49 · 1236 阅读 · 0 评论 -
用两个栈实现队列
题目:用两个堆栈实现一个队列。实现队列的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除节点的功能。实现思路:内置两个stack变量stack1和stack2,然后插入元素时,将元素push到stack1中。若要删除头结点,则检验stack2是否为空,若不为空,则s2顶部的结点就是所谓队列的头结点,否则,将stack1中的所有结点push进stac原创 2013-11-27 12:03:58 · 596 阅读 · 0 评论 -
动态规划--钢条切割的C++实现
在《算法导论》动态规划那章,讲述了一个应用动态规划的例子--钢条切割。钢条切割的问题是这样的:给定一段长度为n英寸的钢条和一个价格表(i=1,2,...,10),求切割钢条方案,使得销售收益最大。我们可以采用一种简单的递归求解方法:我们将钢条从左边切割下长度为i的一段,只对右边剩下的 长度为n-i的一段继续进行切割(递归求解),对左边的一段则不再进行切割。用公式可以表示为:方法一:带备原创 2013-11-14 17:09:42 · 4198 阅读 · 0 评论 -
二叉树后序遍历非递归
vector postorderTraversal(TreeNode *root) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.//迭代vector v;if(root==NU原创 2013-11-12 22:08:32 · 662 阅读 · 0 评论 -
快速排序--c++实现
最近看了快速排序的算法,结合自己的理解,写了一个快排的程序。程序的核心思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。我凭借这个思想写了一个挖坑填洞的程序,实现如下:#includeusing namespace std;void QuickSo原创 2013-11-14 20:21:38 · 981 阅读 · 0 评论 -
海量数据面试题整理
1、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。s转载 2013-11-14 20:43:10 · 1105 阅读 · 0 评论 -
二叉树先序,中序,后序遍历非递归实现
利用栈实现二叉树的先序,中序,后序遍历的非递归操作[cpp] view plaincopy#include #include #include #include #include #include using namespace std; typedef struct BiTNode{转载 2013-11-14 11:35:28 · 1020 阅读 · 0 评论 -
非递归,按序输出集合的全排列
题目描述非递归,按序输出集合全排列,是在笔试面试中经常考的问题。递归输出集合的全排列相对来说还是比较简单的,而非递归实现这个问题需要一些小技巧。全排列是将集合中的元素(可以为数字,可以为字符),按照字典序生成所有排列的集合,并输出这些排列。以数字集合距离,集合{1,2,3}的按序全排列为:1 2 31 3 22 1 32 3 13 1 2转载 2013-11-14 11:42:57 · 1017 阅读 · 0 评论 -
背包问题
先来个0-1背包问题,设置背包总共能容纳的重量是100kg,当前给定有5个物品,它们的重量和价值分别存在数组w和v上(注意:为了方便,我把这两个数组的第一位的值设为0,即实际数组大小为6),并存储了每个物品是否被装包的情况,我们先来看他的Java实现。package com.algorithm.impl;import java.util.Arrays;public class Knap原创 2014-09-04 15:26:29 · 1327 阅读 · 0 评论