随笔分类 -  数据结构与算法

摘要:双指针 [leetcode]283. 移动零 [leetcode]27. 移除元素 [leetcode]26. 删除排序数组中的重复项 [leetcode]80. 删除排序数组中的重复项 II [leetcode]75. 颜色分类 [leetcode]88. 合并两个有序数组 [leetcode]2 阅读全文
posted @ 2024-02-15 18:31 strongmore 阅读(56) 评论(0) 推荐(0)
摘要:### 简介 Bcrypt是一个跨平台的文件加密工具,由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。spring-security内部就是使用这个算法来对用户密码加密的(BCryptPasswordEncoder)。 ### 阅读全文
posted @ 2023-08-20 22:08 strongmore 阅读(209) 评论(0) 推荐(0)
摘要:前言 之前学习了基于比较的各种排序算法java实现各种排序算法(比较排序),今天再学习一下非比较排序。 计数排序 代码实现 以对所有学生的成绩排序为例 import java.util.Arrays; import java.util.Random; public class CountingSor 阅读全文
posted @ 2022-05-18 21:15 strongmore 阅读(164) 评论(0) 推荐(0)
摘要:前言 SQRT分解是一种数据结构,使用分组的思想来解决区间问题,如求区间和,区间最大最小值等。支持动态更新指定索引的值。 将一个包含N个元素的数组分成sqrt(N)组,就是对N开平方。如18个元素,sqrt(18)=4.24,所以分成5组,最后一组不足4个。 原理 以求区间和为例,对数据分组,提前计 阅读全文
posted @ 2022-05-16 21:46 strongmore 阅读(444) 评论(0) 推荐(0)
摘要:问题描述 多数元素是指出现次数大于数组总长度一半的元素,如数组[1,3,3,3,5,7,3],数组长度为7,元素3出现了4次,大于7/2=3,所以元素3为多数元素。 遍历计数法 import java.util.HashMap; import java.util.Map; import java.u 阅读全文
posted @ 2022-05-15 13:16 strongmore 阅读(159) 评论(0) 推荐(0)
摘要:第一种方法 public class TestJudge2NthPower { public static void main(String[] args) { System.out.println(isPowerOf2(-1));//false System.out.println(isPower 阅读全文
posted @ 2021-11-01 09:27 strongmore 阅读(489) 评论(0) 推荐(0)
摘要:第一种方法 public class TestClosest2NthPower { public static void main(String[] args) { System.out.println(test(-1));//1 System.out.println(test(1));//1 Sy 阅读全文
posted @ 2021-10-28 18:24 strongmore 阅读(2105) 评论(0) 推荐(0)
摘要:前言 编辑距离是用来衡量两个字符串之间相似程度的指标,具体表示为字符串A转换为字符串B所需要的最少单字符编辑次数,有插入,删除,替换3种操作,以字符串 horse 和 ros 为例 horse -> rorse,将 h 替换为 r rorse -> rose,删除 r rose -> ros,删除 阅读全文
posted @ 2021-07-24 14:45 strongmore 阅读(926) 评论(0) 推荐(0)
摘要:前言 适用场景:一个箱子中有3个元素A,B,C,抽到A的概率为50%,B概率为20%,C概率为30%。我们可以给A,B,C各附加一个权重值,如50,20,30。 实现原理 以上面的A,B,C为例,A的权重区间为[0,50),B的区间为[50,70), C区间为[70,100),生成一个100之内的随 阅读全文
posted @ 2021-05-18 21:53 strongmore 阅读(2179) 评论(0) 推荐(0)
摘要:前言 1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法,各种文本编辑器的"查找"功能(Ctrl+F),大多采用此算法。 原理 我们使用暴力解法时,是一位一位的向后移动。 当我们遇到上图这种情况,子串最后一个字符E和S不匹配,且S不在待查 阅读全文
posted @ 2021-05-08 19:57 strongmore 阅读(802) 评论(0) 推荐(0)
摘要:前言 字符串匹配就是求一个子串在给定字符串的起始位置。我们先用暴力解法实现,然后在此基础上优化成Rabin-Karp算法。 暴力解法 public interface StringMatcher { int indexOf(String source, String target); } /** * 阅读全文
posted @ 2021-05-06 21:59 strongmore 阅读(619) 评论(0) 推荐(0)
摘要:前言 跳表是从链表演化过来的,对于链表来说,即使是已经排序的,也只能从头遍历,没办法像数组一样支持二分查找。那么有没有什么提高查找效率的方法呢?我们可以给链表建立索引,大概每4个节点抽取出一个索引节点,这种对链表添加多级索引的数据结构就是跳表,类似下图。 跳表的查找 假如我们要查找15节点,查找的节 阅读全文
posted @ 2021-04-30 23:20 strongmore 阅读(211) 评论(0) 推荐(0)
摘要:前言 队列是一种先进先出的容器,随机队列就是顺序入队,随机出队。 生成的迷宫效果图如下: 自动解迷宫效果为 实现 可视化主类 import java.awt.EventQueue; import java.awt.event.KeyAdapter; import java.awt.event.Key 阅读全文
posted @ 2021-04-03 14:43 strongmore 阅读(514) 评论(0) 推荐(0)
摘要:前言 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。 今天我们使用蒙特卡洛方法来求圆周 阅读全文
posted @ 2021-03-30 08:44 strongmore 阅读(1333) 评论(0) 推荐(0)
摘要:前言 在知乎上看到一个好玩的问题:房间里有100个人,每人都有100元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的? 今天使用java中的GUI来模拟一下。 实现 效果图如下 红色表示负债,模拟次数大概150W次。 代码实现 可视化主类 i 阅读全文
posted @ 2021-03-29 11:42 strongmore 阅读(669) 评论(1) 推荐(0)
摘要:前言 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x) 阅读全文
posted @ 2021-03-28 13:55 strongmore 阅读(557) 评论(0) 推荐(0)
摘要:简介 每种数据结构,都有自己的遍历方式,对于二叉树,有前序遍历,中序遍历,后序遍历,对于图,有深度优先遍历和广度优先遍历,今天先看深度优先遍历。 我们从0顶点开始遍历,深度遍历结果0-1->2->3->4->5->6。因为图中可能存在环,所以我们需要记录已经访问过的顶点。 代码实现 import j 阅读全文
posted @ 2021-03-26 20:04 strongmore 阅读(448) 评论(0) 推荐(0)
摘要:简介 上一篇 我们实现了图的深度优先遍历及各种应用,使用广度优先遍历也是可以实现的。 从顶点0开始遍历,结果为0->1->3->2->6->4->5。 代码实现 import java.util.ArrayList; import java.util.LinkedList; import java. 阅读全文
posted @ 2021-03-20 14:55 strongmore 阅读(418) 评论(0) 推荐(0)
摘要:简介 一个图主要包括顶点和边两部分。 自环边 自己到自己形成的边,如图中的0顶点 平行边 顶点3和顶点4这种情况就是平行边 简单图 没有自环边和平行边的图 连通图 图中任意两个顶点之间都有路径 连通分量 图中包含的连通子图的个数,如上图有2个连通分量 有环图 图中顶点之间可以形成环,上图0,1,2, 阅读全文
posted @ 2021-03-16 23:19 strongmore 阅读(850) 评论(0) 推荐(0)
摘要:前言 在客户端如Android的时候会涉及到版本的比较,版本号示例 1.0.0 1.0.a1 代码实现 public class Client { private static int versionCompare(String version1, String version2) { String 阅读全文
posted @ 2021-03-12 19:20 strongmore 阅读(2459) 评论(0) 推荐(0)