![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
文章平均质量分 96
提灯寻梦在南国
这个作者很懒,什么都没留下…
展开
-
动态规划(DP)及相关经典问题讲解
前言动态规划(DP)是计算机编程算法中非常重要的一个知识点,无论是校招 社招,面试官也经常喜欢出此类的编程题来考察面试者的编程能力, 这篇博客主要是概述一下dp的主要思想 然后重点归纳一下leetcode中 股票交易问题的讲解。DP基础知识DP简单可以总结为“一个模型三个特征”。“一个模型”是指动态规划适合解决的问题的模型,也就是多阶段决策最优解模型(这个模型同时也是回溯 贪心解决问题的模型)。一般用动态规划解决最优问题时,解决问题需要经历多个决策阶段。每个决策阶段都对应着一组状态。然后我们寻找一原创 2021-10-05 22:48:11 · 2226 阅读 · 1 评论 -
BitMap BloomFilter BitSet详解
1. BitMapBitMap利用内存中连续的二进制位,用于对大量数据做去重和查询。例如,给定一块长度为10bit的内存空间,想要依次插入整形数据4,2,1,3,我们按照如下的步骤来做:package BitMap;/** * 位图BitMap实现代码 * @author xjh 2010.01.18 */public class bitmap { public char...原创 2019-11-16 20:13:05 · 443 阅读 · 0 评论 -
二分查找算法详解及对应leetcode习题详解 java实现
前言这篇博客,我就查找算法里面 时间复杂度是O(logn)的二分查找算法进行一个比较完善的剖析。话不多说,干货送上。1.基本知识点二分查找(Binary Search)算法,有的数据结构书里面也叫做折半查找算法。算法本身针对的是一个有序的数据集合,查找思想类似于分治思想。每次通过和区间中间元素的对比,将待查找的区间缩小为原来的一半,知道找到要查找的给定元素,或者区间缩小为0。以下是二分查找算...原创 2019-03-12 22:10:35 · 648 阅读 · 0 评论 -
贪心算法及相关leetcode习题详解 java代码实现
前言这篇博客,南国根据自己之前一段时间的学习和刷题,对贪心算法这一知识点做个小的归纳。这篇博客的内容首先是基础知识点,随后是具体的实战习题。话不多说,干货速来~基础知识点在计算机专业常见的极大算法里面,贪心算法算是比较好理解的了。一句话用来概括就是,贪心算法:在对问题求解时,总是做出当前看来最好的选择。这个问题的本质借助的就是贪心算法。考虑当前的决定就是最好的情况。贪心有许多非常经典的...原创 2019-03-10 18:12:14 · 886 阅读 · 0 评论 -
字符串匹配2——多模式匹配(Trie树 AC自动机)
前言紧接着上一篇文章字符串匹配1,在上一篇文章里,我们主要总结归纳的是一个字符串和另一个字符串相比较。这篇文章,南国总结归纳的是两种常见的多模式匹配算法Trie树和AC自动机多模式匹配:一个主串和多个模式串中间的匹配问题。当然,聪明的你一定会问难道之前所学的单模式匹配的算法就不能用;爱解决问题吗? 答案是当然可以,但是用单模式的字符串算法解决这类问题总体的时间开销就会大很多,对于这类问题 我...原创 2019-01-20 18:13:13 · 1811 阅读 · 0 评论 -
字符串匹配1———单模式匹配(BF,RK,Sunday,BM,KMP)
前言字符串匹配(String Match)是计算机行业笔试面试常见的题型,无论是在大公司的笔试真题中,还是在面试中,都是大公司和面试官们津津乐道的话题。当然字符串匹配也具有一定的难度,特别是讲到后面一些比较复杂难懂的算法例如KMP算法,BM算法等,初学者可能一时之间没办法全部理解,多看几遍,总会孰能生巧的。字符串匹配的博客,理论讲解部分我分为两篇来写,分别是单模式字符串匹配和多模式字符串匹配...原创 2018-12-29 21:05:14 · 1095 阅读 · 0 评论 -
散列表应用-HahMap原理讲解
看那这篇博文之前,首先掌握散列表的一些相关知识散列表这篇博文很大程度上参考了HashMap实现原理及源码分析这篇博客,本文在此基础上关于jdk1.8的优化 做了一些简要叙述。在上一篇博文中我们提到过,当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突。前面我们提到过,哈希函数的设计至关重要,好的哈希函数会尽可能地保证 计算...原创 2018-11-28 17:44:59 · 384 阅读 · 0 评论 -
散列表
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本篇博客是博主在进行复习总结时所写,中间有些内容会参考之前的看过的高质量博客进行讲述。如果错误,还望指出,共同进步~一、哈希表在讨论哈希表之前,我们先大概了解下...原创 2018-11-28 17:02:20 · 416 阅读 · 0 评论 -
排序2-时间复杂度为O(nlogn)的算法 归并排序 快排
上一篇博文排序1主要讲的是关于评定算法性能的一些指标,以及时间复杂为O(n2)的排序算法。这一篇博文我重点讲述世家复杂度为O(nlogn)的两个经典算法—归并排序 和快排关于这两个算法 网上的资料很多 在面试中也会经常会被问到(特别是快排),这里我结合自己的理解和总结,写的不好的地方 请多指教。归并排序(MergeSort)归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算...原创 2018-11-28 13:40:39 · 2333 阅读 · 0 评论 -
排序1-算法性能分析指标,冒泡,选择,插入排序算法(包括希尔排序)
排序算法在计算机软件方向属于必修的基础点。这篇开始我会紧握所能写下关于排序的总结。如何分析排序算法的性能?排序算法的执行效率1.时间复杂度分析,包括最好 最坏 平均时间复杂度分析。关于这一点详细内容我在之前的一篇博客中做过描述白话代码中的复杂度分析这里要说明一点的是以往我们分析时间复杂度 都是从宏观上进行分析,很少考虑到时间复杂度的系数、常数、低阶等因素。但是在实际开发中,我们排序的数据规...原创 2018-11-23 21:29:55 · 339 阅读 · 0 评论 -
浅谈递归和分治
递归递归有“去”和“来”的过程,去的过程叫“递”,回来的过程叫“归”。递归需要满足的三个条件:一个问题的解可以分解为多个子问题的解(子问题就是数据规模更小的问题) 该问题与分解之后的子问题,除了数据规模不同之外,求解思路完全一样 存在递归终止条件关于递归的逻辑思考,如果某个问题只有一个子问题(可理解为只有一条线路,我们可以可以很简单的画出“去”和“来”的过程,例如 f(1)=1;...原创 2018-10-13 20:40:46 · 420 阅读 · 0 评论 -
经典案例-链表操作的几大经典例子 leetcode 单链表反转 环的检测 求中间节点 有序链表合并等
这篇博文 主要总结链表在应用时的几个重要案例。学习之前,最好能够掌握链表相关的一些基础知识,以及链表中数据的插入、删除操作如何实现等等,这些网上资料很多,这里没有做过多介绍,不熟悉的同学可以看代码之前简单了解一下。1.单链表反转链表中环的检测求中间节点删除链表中第n个结点 删除链表中倒数第n个节点import java.util.Scanner;...原创 2018-10-10 15:25:00 · 322 阅读 · 0 评论 -
经典案例-回文序列 Java String(Char)存储实现 单链表存储实现
判断一串数字或者一个字符串是否回文,是一个编程的基本问题。这里我根据自己最近回顾数据结构相关知识,java语言实现两个经典案例。1.利用String存储字符串,判断是否为回文字符串。这个解决比较简单,i和j分别从String的前后进行遍历进行比较 一次得到是否为回文字符串。import java.util.Scanner;/** * 利用String解决回文字符串问题 * @...原创 2018-10-09 16:16:35 · 952 阅读 · 0 评论 -
数组Array,数组array和Arraylist的对比 ,数组和链表的对比
数组(Array)是一种线性表数据结构。他用一组连续的内存空间,来存储一组具有相同类型的数据。线性表(Linear List)是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。除了数组(Array),链表(Linked List)、队列(Queue)、栈(Stack)也是线性表结构。与之相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性表,是因为数据之间并不...原创 2018-10-03 17:18:44 · 256 阅读 · 0 评论 -
白话代码中的复杂度分析-大O复杂度表示法 时间,空间复杂度分析 最好,最坏,平均复杂度
复杂度分析大O复杂度表示法算法的执行效率,粗略地讲,就是算法代码执行的时间。我们知道所有代码执行的时间T(n)与每行代码的执行次数n成正比。T(n)=O(f(n))T(n)表示代码执行的时间;n表示数据规模的大小;f(n)表示每行代码执行的次数总和。公式中的O表示代码的执行时间T(n)与f(n)表达式成正比。大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行...原创 2018-09-28 15:38:16 · 1106 阅读 · 0 评论