GithubHelp home page GithubHelp logo

javaalgorithms's Introduction

基本数据结构

数组 array

  • 线性数据结构,可以将相同类型的元素存储在连续的内存空间
  • 数组应用
    • 利用数组下标随机访问特性,随机抽取样本
    • 排序和搜索
    • 查找表,将大小写字母或者ASCII码值映射到数组中,可以快速查找到元素
    • 可实现栈、队列、哈希表、堆、图等数据结构
  • 动态数组实现

链表 linked list

  • 线性数据结构,使用链表存储可以使得各个数据节点分散在内存各处,不要求内存地址物理上连续
  • 链表类型
    • 单向链表
    • 双向链表
    • 环形链表
  • 链表应用
    • 单向链表常见于栈、队列、哈希表冲突解决方案、图邻接表解决方案
    • 双向链表常见于高级数据结构如红黑树、B树、Java中LinkedList集合;LRU最近最少使用算法
    • 环形链表常见于周期性操作,如时间片轮转调度算法
  • 链表实现
  • 练习题目:
    1. 翻转链表(迭代和递归方式)
    2. 删除倒数第N个节点
    3. 合并两个有序链表
    4. 环形链表判断
    5. LRU缓存淘汰算法实现
    6. 回文链表判断
    7. 删除链表中等于给定值 val 的所有节点(递归和迭代写法的对照)

栈 stack

  • 受限制的线性数据结构,有先进后出的特性
  • 手写栈
  • 练习题目
    1. 四则运算简单实现
    2. 括号匹配

队列 queue

哈希表 hash table

树 tree

  • 手写二叉搜索树
    1. 维护一棵二叉搜索树,add, remove, contains, minimum, maximum方法
    2. 深度优先遍历和广度优先遍历实现(递归和迭代两种写法)
    3. 打印二叉树递归建树过程

集合

  • 集合的实现
    • 基于二叉搜索树
    • 基于链表
    • 两者性能上的比较,时间复杂度的分析
  • 练习题目
    1. 唯一摩尔斯密码词
    2. 两个数组的交集

  • 堆的实现
    1. 数组堆化headify, 上浮siftUp, 下沉siftDown, 替换replace等关键操作
    2. 基于堆实现优先队列
  • 练习题目
    1. 前 K 个高频元素

线段树

  • 线段树实现
    1. 构建线段树、区间检索、更新
  • 练习题目
    1. 区域和检索 - 数组不可变
    2. 区域和检索 - 数组可修改(在数据动态变化的场景下更能体现优势)

字典树

  • 字典树实现
    1. Node节点的设计(map, isWord)
    2. add添加, contains搜索, isPrefix前缀搜索的递归与非递归写法
  • 练习题目
    1. 添加与搜索单词 - 数据结构设计
    2. 键值映射

并查集

  • 并查集实现
    1. isConnected是否关联,unionElements元素合并
    2. 基本实现quick find,查询O(1),合并O(n)
    3. quick union,查询O(h),合并O(h) h为合并树的高度
    4. 基于size优化,元素个数少的集合合并到元素个数多的集合上
    5. 基于rank优化,元素对应树深度低的的集合合并到深度高的集合上
    6. 路径压缩,在find查找根元素同时将p指向的父节点断开,转而指向p的爷爷节点
    7. 路径压缩II,在数据压缩基础上,将节点一次性指向根节点,树变为两层

算法题分类

数组

链表

单调栈

队列

优先队列
单调队列

动态规划

01背包
完全背包
子序列
分割问题

贪心

双指针

对撞指针
快慢指针
滑动窗口

查找表法

数学

前缀和

二分法

排序算法

DFS深度优先遍历

BFS广度优先遍历

设计

javaalgorithms's People

Contributors

lichuangbo avatar xiaotiancode avatar

Watchers

 avatar  avatar

Forkers

wenqiang233

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.