数据结构与算法
西瓜游侠
希望自己能够开心
展开
-
【查找算法】——顺序查找、折半查找、分块查找(索引查找)
查找算法概述:查找算法:就是在是数据元素集合中查看是否存在于指定的关键字相等的元素。查找分为两种:静态查找和动态查找。1) 静态查找:是指在数据元素集合中查找与给定的关键字相等的元素。2) 动态查找:就是指在查找过程中,如果数据元素集合中不存在与给定的关键字相等的元素,则将该元素插入到数据元素集合中。转载 2015-12-11 19:49:38 · 12966 阅读 · 2 评论 -
构造hash函数的方法、解决冲突的方法、常见hash算法
转载:http://blog.csdn.net/tanggao1314/article/details/51457585构造hash函数的方法直接定址法:直接定址法是以数据元素关键字k本身或它的线性函数作为它的哈希地址,即:H(k)=k 或 H(k)=a×k+b ; (其中a,b为常数)。数字分析法:假设关键字集合中的每个关键字都是由 s 位数字组成 (u1, u2, …, us),分析关键转载 2017-08-29 11:10:08 · 1672 阅读 · 0 评论 -
求两个数组的交集
问题: 给你两个数组,求两个数组的交集。 比如: A = 1 4 7 3 5 , B = 2 9 3 8 5, 那么交集就是 3 5.方法一:每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存。该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度。方法二:先将A,B数组排序。因为A B 都排过序,所以,每一次从B数组取值后,可以利用二分查找看是否在数组原创 2017-09-05 22:36:04 · 624 阅读 · 0 评论 -
拓扑排序问题
算法题: 假设有些任务需要执行,任务之间有依赖,给出一个满足条件的执行顺序。 输入: b, a(表示b依赖于a,需要a先执行,才能执行b,其他类似) c, b d, a 输出:a, b, c, d使用拓扑排序;package com.tao;import java.util.ArrayList;import java.util.List;/** * Created by Michae原创 2017-09-06 11:13:07 · 472 阅读 · 0 评论 -
有内存限制的海量数据排序
转载:http://blog.csdn.net/shitangdejiaozi/article/details/51240107磁盘文件排序 问题描述: 输入:给定一个文件,里面最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数),且其中每个数都小于等于n,n = 10^7。 输出:得到按从小到大升序排列的包含所有输入的整数的列表。 条件:最多有转载 2017-09-05 22:08:25 · 2264 阅读 · 0 评论 -
B-树(B树)、B+树、B*树
转载:http://www.jianshu.com/p/d43434dc5dfdB-TreeB-Tree就是B树。是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个转载 2017-08-15 15:32:12 · 275 阅读 · 0 评论 -
常用计算的实现
求两个数 a, b 的最大公约数 //求a,b的最大公约数 public int gcd(int a, int b) { while(a % b != 0) { int c = a % b; a = b; b = c; } return b; }原创 2017-08-24 23:07:21 · 234 阅读 · 0 评论 -
Java实现 大顶堆 和 小顶堆
1、大顶堆package jianzhiOffer;import java.util.ArrayList;import java.util.List;/** * 大顶堆 * * @author tao * */public class MaxHeap> { private List mHeap; // 存放元素的动态数组 public MaxHeap() {转载 2017-06-06 22:53:28 · 4313 阅读 · 0 评论 -
冒泡排序、快速排序、堆排序(Java)
转载:http://blog.csdn.net/pzhtpf/article/details/7560294一、冒泡排序 基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。Java实现: /** * 冒转载 2017-08-12 23:01:57 · 1808 阅读 · 0 评论 -
二分查找(递归、非递归)
二分查找(递归)package com.tao.algorithm;/** * Created by michael on 17-8-13. */public class 二分查找_递归 { public static void main(String[] args) { int[] a = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,原创 2017-08-16 10:35:18 · 293 阅读 · 0 评论 -
简单选择排序、直接插入排序、归并排序
一、简单选择排序基本思想: 在要排序的一组数中,选出最小的一个数与第一个位置的数交换; 然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。实例: Java实现:package com.tao.algorithm;/** * Created by michael on 17-8-13. */public class 简单选择排序 {转载 2017-08-16 10:32:35 · 629 阅读 · 0 评论 -
不使用第三方变量交换两个参数的值
(1)算术运算 a = a + b; b = a - b; a = a - b;位运算(异或) a = a ^ b; b = a ^ b; a = a ^ b;转载 2017-07-15 22:58:14 · 430 阅读 · 0 评论 -
Q22_把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。package Proxy;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;class TreeNode { int val = 0; TreeNode left = null; Tre原创 2017-06-02 22:56:36 · 359 阅读 · 0 评论 -
Q21_按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。package Proxy;import java.util.ArrayList;import java.util.Stack;class TreeNode { int val = 0; TreeNode left原创 2017-06-02 22:25:10 · 303 阅读 · 0 评论 -
Q23_对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。package jianzhiOffer;public class Q23_对称的二叉树 { class Solution { boolean isSymmetrical(TreeNode pRoot) { if (pRoot == null原创 2017-06-05 21:59:05 · 282 阅读 · 0 评论 -
二叉树遍历(先序遍历、中序遍历、后序遍历)——递归方法和非递归方法
注:本文来自 左程云的书《程序员代码面试指南》题目: 分别用递归和非递归方法,实现二叉树的先序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)。// 二叉树节点class Node { public int value; public Node left; public Node right; public Node(int value) {原创 2017-05-15 16:41:44 · 606 阅读 · 0 评论 -
【数据结构算法】——内部排序整理总结
内部排序: 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。按所用策略不同,可归纳为五类:插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序、分配排序。1.冒泡排序(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个转载 2015-12-09 13:49:35 · 739 阅读 · 0 评论 -
Java实现全排列
一、问题描述给定一个字符串数组,打印该字符串数组中所有元素的全排列。 例如,字符串数组 [“Are”, “You”, “Ok”] 的全排列为: 1. [“Are”, “You”, “Ok”] 2. [“Are”, “Ok”, “You”] 3. [“You”, “Are”, “Ok”] 4. [“You”, “Ok”, “Are”] 5. [“Ok”, “You”, “Are”]原创 2018-01-23 16:21:51 · 925 阅读 · 0 评论