
数据结构与算法
文章平均质量分 84
紫雾凌寒
公众号:紫雾凌寒。8年互联网大厂研发经验,关于软件开发探讨可联系我,专注分享人工智能、移动开发、学习成长。
路漫漫其修远兮,吾将上下而求索。
展开
-
【算法笔记】渐进符号
在求算法的时间复杂度之前我们先了解一些基本概念:1、渐进符号1.1、O符号定义:另f(n)和g(n)是从自然数集到非负实数集的两个函数,如果存在一个自然数n0原创 2016-03-18 20:37:07 · 4492 阅读 · 0 评论 -
滑动窗口算法
什么是滑动窗口算法我们学习过计算机网络都知道为了避免拥塞发生,在网络传输时有滑动窗口协议控制传输时流量。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。这个跟我们今天说的滑动窗口算法是一个原理。滑动窗口算法的作用该算法的作用就是将我们多层嵌套的循环语句根据局部最优解来转换为单个的循环语句,从而减少时...原创 2019-07-13 22:02:14 · 10718 阅读 · 5 评论 -
深入理解HashMap原理(二)——手写HashMap
前言前面一篇文章(深入理解HashMap原理(一)——HashMap源码解析(JDK 1.8))我们通过JDK 1.8的HashMap的源码了解了HashMap的原理。俗话说:光说不练假把式。下面我们自己动手撸一个HashMap。本文基于JDK1.7 只写数组+链表结构。思考我们前面知道,HashMap的存储结构为散列表,解决哈希冲突是通过链表法解决的,结构如下:那么我们也要来...原创 2019-04-17 13:59:13 · 4580 阅读 · 7 评论 -
深入理解HashMap原理(一)——HashMap源码解析(JDK 1.8)
介绍HashMap原理是JAVA和Android面试中经常会遇到的问题,这篇文章将通过HashMap在JDK1.7和1.8 中的源码来解析HashMap的原理。相关源码数组采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查...原创 2019-04-10 14:11:18 · 4848 阅读 · 4 评论 -
最短路径——迪杰斯特拉算法
前言好久没有更新过算法的博客了,这篇博客主要介绍我们算法中很著名的一个问题——最短路径问题及解决最短路径问题的经典算法之一迪杰斯特拉算法。最短路径问题最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括: 确定起点的最短路径问题 -即原创 2016-08-23 20:29:58 · 9599 阅读 · 1 评论 -
【算法学习笔记】贪心算法
1、什么事贪心算法 所谓贪心算法就是指我们所做出的选择在当前情况下看来总是最好的,它考虑的不是全局最优解,是局部最优解。原创 2016-03-20 18:40:31 · 4016 阅读 · 0 评论 -
排序问题之快速排序
排序问题是我们算法中最常遇到的问题,也是最基础的问题。排序算法主要有8大算法。今天主要介绍快速排序。快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下图为快排动态图:...原创 2016-08-03 19:44:13 · 1746 阅读 · 0 评论 -
【算法修炼】台球碰撞 C
台球碰撞时间限制:1000 ms | 内存限制:65535 KB难度:3描述在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为a的射线(即:x正半轴逆时针旋转到此射线的角度为a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角)。原创 2016-04-09 15:31:23 · 5388 阅读 · 0 评论 -
【算法学习笔记】之分治算法
引言“分治”顾名思意:分而治之。《孙子兵法》有云:“凡治众如治寡,分数是也 。”分治法在我们日常生活中也最为常见。比如管理一个国家:先把国家划分为许多省份,再把每个省份划分为若干个市,依此类推,市===》县(区) ===》乡(镇)===》村。这就是分治。在算法设计领域我们有一种算法称为分治算法。1、分治算法的基本思想及步骤分治算法的总体设计思想就是”分、治、合“。所对应的步骤也是”分、治、合“。分...原创 2016-03-25 15:49:16 · 4010 阅读 · 0 评论 -
【LetCode 算法修炼】Add Two Numbers
题目You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as原创 2016-04-05 22:04:56 · 2876 阅读 · 0 评论 -
【LetCode算法修炼】Two Sum
题目Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution.Example:Gi原创 2016-04-05 21:46:16 · 1570 阅读 · 0 评论 -
【算法学习笔记】之动态规划
引言动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问原创 2016-03-21 21:34:48 · 3860 阅读 · 0 评论 -
【Java 学习】”大数据“处理
JAVA大数处理(BigInteger,BigDecimal) 在用C或者C++处理大数时感觉非常麻烦,但是在JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大。这两个类都在java.math.*包中,因此每次必须在开头处引用该包。转载 2016-04-01 12:55:16 · 1858 阅读 · 0 评论 -
【算法学习】算法的复杂度
算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。1、时间复杂度(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可原创 2016-03-18 20:52:37 · 2007 阅读 · 0 评论 -
最长回文子串——动态规划和马拉车算法
题目s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”分析我们首先要理解什么是"回文",回文就是无论从前往后读还是从后往前读都是一样的,如:“abcba”,"noon"等。那么要求回文串,最简单直接的方法就是暴力法,...原创 2019-08-10 12:01:50 · 2292 阅读 · 0 评论