数据结构
逆水当行舟
我早就想,要这样载着你...翻山越岭
展开
-
数据结构与算法练习-Stack栈
用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。代码Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2原创 2016-05-09 19:30:01 · 633 阅读 · 0 评论 -
算法练习-快速排序
定义是对冒泡排序的改进 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实现步骤 定基准——首先随机选择一个元素最为基准 划分区——所有比基准小的元素置于基准左侧,比基准大的元素置于右侧 递归调用——递归地调用此切分过程 复杂度时间复杂度根据中位p原创 2016-05-06 00:21:15 · 1085 阅读 · 0 评论 -
算法练习-归并排序
归并排序定义将两个有序对数组归并成一个更大的有序数组。通常做法为递归排序,并将两个不同的有序数组归并到第三个数组中。 复杂度每一层排序进行N次比较,总共有logN层,时间复杂度: O(NlogN) 因为使用了数组同等大小的辅助空间,空间复杂度:O(N)代码public class SortMethod { public static void merge(int[] arr) {原创 2016-05-05 19:31:27 · 544 阅读 · 0 评论 -
数据结构与算法练习-数组查找,排序
规律二维数组中的查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 如果含有就输出其在数组 中存在的位置,格式如:“横坐标,纵坐标”,如果不包含就返回空String分析思路:首先我们选择从左下角开始搜寻,(为什么不从左上角开始搜寻,左上角向右和向下都是递增,那么对于一个点,原创 2016-05-09 18:21:04 · 822 阅读 · 0 评论 -
数据结构与算法练习-排序
调整数组顺序使奇数位于偶数前面描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析 这里很容易联想到快速排序基于中间值,左右两边基本有序的方法。但是快速排序是一个不稳定算法,会改变数与数之间的位置,虽然能满足题干的前半部分,但是满足不了条件—并保证奇数和奇数,偶数和偶数之间原创 2016-05-11 00:47:17 · 2278 阅读 · 0 评论 -
数据结构与算法练习-Linked List/链表
反转链表题目描述输入一个链表,反转链表后,输出链表的所有元素。分析代码public class ListNode { public int val; public ListNode next = null; public ListNode(int val) { this.val = val; } }public static ListNode Rever原创 2016-05-10 16:32:54 · 775 阅读 · 0 评论 -
数据结构与算法练习-回溯、递归
八皇后问题描述八皇后问题百度百科分析从第一行开始,i表示行数,j表示列数(1<=i,j<=8) 第1行 j的位置可为任意 第2行 j的位置取决第1行 第3行 j的位置取决于第1和第2行 第i行的可摆放位置,取决于i-1行的棋子摆放 由此可以递归处理。然后再逐行遍历循环 代码 // 8行8列 public final static int MAX = 8; /** 存储总原创 2016-05-12 16:22:23 · 654 阅读 · 0 评论 -
数据结构与算法练习-二叉树
深度优先遍历二叉树描述使用递归可以轻易的遍历一颗二叉树,根据访问顺序的不同分为 先序遍历 中-左-右 中序遍历 左-中-右 后序遍历 左-右-中 代码 /** * 深度优先 先序遍历 */ public static void scanPreTree(TreeNode root, ArrayList<Integer> list) { if原创 2016-05-08 18:10:48 · 936 阅读 · 0 评论 -
数据结构与算法练习-动态规划
连续子数组的最大和(包含负数)描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他原创 2016-05-12 01:35:23 · 757 阅读 · 0 评论 -
数据结构与算法练习-Number/数字
二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析思路: 通过求余运算-%2,判断二进制数末尾是否是1,是就累加。然后右移1位。关键是负数吧,在C++中,有符号整数右移(算术右移)是最高位补符号位的,比如 -1 >> 1 其实是 -1,转成unsigned int 就可以了。在java中,没有unsigned这个东西,但是有 逻辑右移 >>> 运算符。 另一原创 2016-05-10 15:53:37 · 722 阅读 · 0 评论 -
堆排序
实现堆排序作为选择排序的改进版,堆排序可以把每一趟元素的比较结果保存下来,以便我们在选择最小/大元素时对已经比较过的元素做出相应的调整。 堆排序是一种树形选择排序,在排序过程中可以把元素看成是一颗完全二叉树,每个节点都大(小)于它的两个子节点,当每个节点都大于等于它的两个子节点时,就称为大顶堆,也叫堆有序; 当每个节点都小于等于它的两个子节点时,就称为小顶堆。构造堆堆插入假设堆是有序的原创 2016-05-24 18:58:42 · 678 阅读 · 0 评论 -
数据结构与算法练习-递归
青蛙跳一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法 代码public static int getStep(int n) { if (n == 0) { return 0; } // 步数为1 有1种跳法 if (n == 1) { retur原创 2016-05-08 23:47:33 · 487 阅读 · 0 评论