数据结构与算法
脑干缺失不影响打字
只有足够努力,才能看起来毫不费力
展开
-
脱裤子放屁之用两个栈实现队列、用两个队列实现栈
牛客网上有一道很nt的题目,用两个栈实现队列,你直接用队列不好吗?还耗内存,真的是脱裤子放屁,但是骂归骂,题目还是要做的。用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。我们可以用stack1进栈,stack2出栈。这样就可以让先进先出的顺序变成先进后出。如果stack2为空的话,stack1进栈元素进stack2 。stack2再出栈就可以了import java.util.Stack;public class Solution { Stack&l原创 2020-11-04 11:25:14 · 119 阅读 · 0 评论 -
手把手教你LRU算法思想,从底层开始写LRU实现
在手撕LRU算法之前,我们要先知道LRU算法是什么,思想是什么?所谓的LRU算法,就是Least Recently Used,就是最近最少使用算法。算法的思想就是,当我设置的LRU缓存容量为3的时候,在新加入一个容量之前,如果还有剩余容量,则直接加入,如果已经满了,则去掉最近最少使用的,也就是最远的那个。用队列来说,就是每次我新加入一个对象都是从队头插入的,如果容量充足,则直接加入;如果容量不够了,我就要把一个元素从队尾出队之后,我在将新的元素加入进去。这样就是一个LRU的基本思想。值得注意的是,如果我原创 2020-11-04 10:33:41 · 963 阅读 · 0 评论 -
前缀表达式计算、中缀表达式计算、后缀表达式计算
首先要知道什么是前缀表达式,什么是中缀表达式,什么是后缀表达式所谓的中缀表达式就是类似于这种的运算1+((2+3)×4)-5所谓的前缀表达式就是符号在两个操作数的前面- + 1 × + 2 3 4 5所谓的后缀表达式就是两个数在运算符的右边3 4 + 5 × 6 -这样我们就知道了前中后缀表达式所代表的含义是什么,在我们人的脑子看来,这个是一个很简单的运算操作,但是你要把他放在电脑上面,中缀表达式我感觉是比较难的,因为你要考虑运算符的优先级,括号的情况等等,我们可以将其转换成为前缀表达...原创 2020-11-03 20:43:42 · 915 阅读 · 0 评论 -
回溯法(深度搜索) 全排列的问题
其实深度搜索和回溯法的区别,在我这里感觉还是很模糊的总感觉不一样,但是算法的思想是一样的,都是进行不断的尝试,来判断答案的正确性,如果不行的话,我们就回到上一个状态,再进行尝试,如果还是不行,再回去上一个状态…以此类推最简单的问题就是全排列的问题了,例如leetcode的46.全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2...原创 2020-02-29 23:56:32 · 421 阅读 · 0 评论 -
【牛顿迭代法】x的平方根
在刷leetcode 69 .x的的平方根的时候, 题解中提到了这个牛顿迭代法, 我觉得这个是一个好的算法,在很多求值的领域都可以用上,因为满足牛顿迭代法的会收敛于一个值,这里有点想二分法查找,但是个人感觉比二分法查找更快首先我们来看一下这道题目吧:class Solution { public int mySqrt(int x) { }}其实我们Math中有一个...原创 2020-05-08 15:46:13 · 410 阅读 · 0 评论 -
x的平方根 && x的n次幂
文章目录1、x的平方根2、x的n次幂1、x的平方根x的平方根这里我们具体探究一下牛顿迭代法:首先我们都知道求a的平方根的公式为x=ax=\sqrt{a}x=a那么我们的平方函数就为(这里的a就是我们要开平方根的数字,我们这里以a=2为例子)f(x)=x2−af(x)=x^2-af(x)=x2−a我们来看这样一张图片假设我们的a为2,也就是求2的平方根。我们不妨大胆做一个假设,我们假设2的平方根的结果等于4(其实这个假设为多少并不重要,等会他会自己让结果收敛)我们来看一下这样一张图a和b原创 2020-10-11 23:21:43 · 1210 阅读 · 0 评论 -
图解基本排序算法
文章目录简单选择排序冒泡排序选择排序插入排序归并排序自顶向下的归并排序自底向上的归并排序希尔排序快速排序总结简单选择排序冒泡排序是将最大的元素往后面排,简单选择排序是将小的元素往前面排算法思想:1.将第一个元素和其余元素进行对比,如果第一个元素和其他元素相比,第一个元素大,则交换,一轮下来,最小的元素会在第一个2.将第二个元素和其余的元素对比,如果对比结果大,则交换3.重复算法图解:以此类推……Java代码:void simpleSort(int[] a){ int te原创 2020-08-05 21:21:46 · 409 阅读 · 0 评论 -
【一看就懂的图解算法】归并排序
归并排序:将两个有序的数组归并成一个更大的有序数组原创 2020-10-29 10:28:19 · 206 阅读 · 0 评论 -
【一看就懂的图解算法】希尔排序
希尔排序是基于插入排序的改良版本,我们来回顾一下插入排序是怎么样的一个过程:插入排序:从左往右依次选取一个元素,插入到最左边已经排序好的结果集里面。其实希尔排序也是这个原理,和插入排序不同的是,插入排序是在结果集里面依次遍历查找,而希尔排序使用了二分法查找,快速定位到需要插入的问题。...原创 2020-09-25 22:02:47 · 489 阅读 · 0 评论 -
【一看就懂的图解算法】数据结构与算法——排序算法
因为即将进入实习阶段,然后笔试算法题都是必考的,那么我就想把以前学的数据结构与算法复习一遍:## 快速排序## 冒泡排序## 简单选择排序## 选择排序## 插入排序归并排序希尔排序……...原创 2020-09-25 22:03:07 · 185 阅读 · 0 评论 -
【一看就懂的图解算法】插入排序
插入排序顾名思义就是将元素插入到他属于的位置上。插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。算法思想:1.刚开始结果集只有一个元素2.获取要插入的元素,和结果集相对比,如果比第一个元素大,则...原创 2020-09-25 22:02:36 · 303 阅读 · 1 评论 -
【一看就懂的图解算法】选择排序
选择排序选择排序和冒泡排序时一样的思想,都是把最大的数字排到最后面,不同的是,冒泡排序是对比相邻元素交换,而选择排序是直接将最大的数字和最后一个数字交换。算法图解:如此类推;java代码:public void selectSort(int [[ nums){ int size = nums.length; for (int i=0;i<size-1...原创 2020-09-25 22:02:16 · 129 阅读 · 0 评论 -
【一看就懂的图解算法】简单选择排序
简单选择排序冒泡排序是将最大的元素往后面排,简单选择排序是将小的元素往前面排算法思想:1.将第一个元素和其余元素进行对比,如果第一个元素和其他元素相比,第一个元素大,则交换,一轮下来,最小的元素会在第一个2.将第二个元素和其余的元素对比,如果对比结果大,则交换3.重复算法图解:以此类推……Java代码:void simpleSort(int[] a){ int t...原创 2020-09-25 22:02:06 · 6622 阅读 · 0 评论 -
【一看就懂的图解算法】冒泡排序
冒泡排序冒泡排序就是把一个数组中最大的数字往数组的末端排序:算法思想:1.比较相邻的两个元素,如果第一个元素比第二个元素大,就交换2.对每一对相邻的元素都执行1操作,从开始第一对到最后一对(所以经过一轮之后,最大的数字会被安排到最末尾的位置放着)3.第一轮排序之后,因为最后一个数字是最大的,不论如何位置都不会改变的,那么我们就不管最后一个,排除第一个位置之后,我们执行1,2操作算法...原创 2020-09-25 22:01:54 · 151 阅读 · 0 评论 -
【一看就懂的图解算法】快速排序
快速排序使用了分治的思想算法步骤:1 从数列中挑出一个元素,称为 “基准”(pivot),2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。递归的最...原创 2020-09-25 22:01:42 · 304 阅读 · 0 评论