
算法
丢丢001
本人是一名计算机专业的在校大学生,通过博客整理学习资料笔记,也希望的的东西能对你有所帮助
展开
-
HashMap如何实现的(手写一个HashMap)
1.原理2.代码Mappackage com.mapText;public interface Map<K,V> { V put(K k,V v); V get(K k); int size(); interface Entry<K,V>{//创建一个对象,用于装值 K getKey(); V getValue(); }}HashMappackage com.mapText;原创 2021-04-08 20:22:32 · 223 阅读 · 0 评论 -
面试经典:两个栈实现一个队列(Java实现)
前几天抱着试试的态度投了了一个公司,面试的时候让我手撸代码两个栈实现一个队列,我硬是没整出来,太尴尬了,这确实是一个很基础的算法题不说了,进正题一.思路分析首先我们要知道,栈是后进先出,队列是先进先出,怎么实现呢?我们需要用到两个栈s1存数据,s2中转栈。很多人写的时候,直接将数据压入s1,然后将s1中的数据依次压入s2,然后依次将s2中的数据出栈,这样确实实现了队列先进先出的原理,但再次存入数据时,因为s2中的数据已成定序,在出队列就不能先进先出了,咋整呢?方法如下:每次存入数据时,判断s1是原创 2021-03-20 22:39:22 · 363 阅读 · 0 评论 -
中缀表达式转后缀表达式并计算
**一.中缀表达式转后缀表达式**1.初始化一个栈s1一个容器list:运算符栈s1和结果容器s22.从左至右扫描运算符,遇到操作数时,压入s23.遇到括号时:1)左括号"(" 直接压入s12)右括号" ) “,依次弹出s1栈顶运算符,并压入s2,直到遇 到”(“并将其弹出4.遇到运算符时,比较与s1栈顶运算符的优先级1)若s1为空或栈顶运算符为”(",直接压入s12)若优先级高于栈顶运算符,直接压入3)否则,将s1栈顶运算符压入s2中,重复步骤4与新的运算符比较5.将原创 2021-03-19 14:18:44 · 300 阅读 · 0 评论 -
快速排序的递归非递归算法
一.递归算法public static void kuaipai(int[] a,int left,int right){ if(left>right){ return ; } int i=left,j=right; int tmp=a[left]; while(i<j){ while(tmp<=a[j]&&i<j){ j--; } while(tmp>=a[i]&i<j){ i++;原创 2021-03-16 16:44:17 · 282 阅读 · 0 评论 -
Kruskal算法寻找最小生成树(java实现)
一.算法分析1.步骤:a.将所有边的权值从小到大排序b.依次将各条边加入到最小生成树中c.判断是否构成回路,如构成回路,则不选择这条边d.遍历所有边2.判断是否构成回路记录顶点在最小生成树中的终点,顶点的终点是在最小生成树中与之联通的最大顶点,判断两个顶点的终点是否重合,若重合则构成回路二.代码实现package text_seven_suanfa;import java.util.Arrays;public class KruskalCase { private int原创 2020-09-12 14:15:56 · 1321 阅读 · 0 评论 -
Java实现贪心算法解决集合覆盖问题
1.贪心算法1)贪心算法是指在对问题求解时,每一步都选择最好或者最有利的选择,从而希望结果就是最好或者最优的算法2)贪心算法所得到的结果不一定是最优的结果,但都是最接近最优解的结果2.问题分析1)问题:假设存在如下表的广播台,以及广播台可以覆盖的地区,如何选择最少的广播台,让所有的地区都可以接受到信号2)解题步骤:a.遍历所有的广播电台,找到一个覆盖了最多未覆盖的地区的电台b.将这个电台加入到一个集合中,同时去掉已覆盖的地区c.重复步骤a3.代码package text_seven_s原创 2020-09-08 21:58:41 · 436 阅读 · 0 评论 -
KMP算法(java代码)
package text_seven_suanfa;import java.util.Arrays;public class KMPSearch { public static void main(String[] args) { // TODO Auto-generated method stub String str1="abcabd"; String str2="abd"; int[] a={0,1,0}; System.out.println(Arrays.toStr原创 2020-09-08 20:10:41 · 215 阅读 · 0 评论 -
动态规划法解决0-1背包问题(Java实现)
1.动态规划法介绍1)核心思想:将大问题划分为小问题进行解决,从而处理算法2)与分治法不同的是,动态规划法用于求解经分解得到子问题不是相互独立的,即下一个子问题的求解是建立在上一个子问题的解的基础上,进行下一步求解。3)动态规划法可以通过填表的方式逐步推进,得到最优解2.0-1背包问题实在不知道怎么用语言表示了,看代码吧,代码运行输出的表格表示求解过程package text_seven_suanfa;public class package0_1 { public static void原创 2020-09-05 18:31:14 · 3317 阅读 · 0 评论 -
Java实现分治法求解汉诺塔问题
1.分治法分治法的基本思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法的求解步骤:1) 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题3)合并:将各个子问题的解合并为原问题的解2.经典案例:汉诺塔问题解题思路:想象只有A,B两块时,我们先将B移动到第二个塔,再将A移动到A移动到第三个塔,再将B移动到第三个塔。结合分治法的思想,将所有的块分成两部分,最下面原创 2020-09-02 14:39:28 · 251 阅读 · 0 评论