算法
文章平均质量分 92
主要记录自己在leetcode或者其它刷题网站的记录
我要200
这个作者很懒,什么都没留下…
展开
-
伙伴匹配项目的随机匹配算法功能开发
------------------状态转移方程。的直接遍历,我的第一个标签开始,遍历你的标签数组,如果有这个标签,我就记下来,count++,然后第二个标签,这样一想直接就是指数级别的复杂度,dp[i][j]表示将str1的前i个字符变成str2需要几步 ------------------确定dp数组的含义。将dp这个二维数组第一行和第一列初始化为i和j ------------------初始化dp数组。改,dp[i][j] = dp[i - 1][j - 1] + 1。原创 2024-07-19 09:44:21 · 859 阅读 · 0 评论 -
前缀和,差分算法理解
知道这个条件之后,这题就很简单了,我们只需要把我们累异或的结果都和这个最大值进行异或就行。原创 2024-05-19 17:02:34 · 775 阅读 · 0 评论 -
洗牌算法理解
/ 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。例如,返回 [3, 1, 2]// 随机返回数组 [1, 2, 3] 打乱后的结果。// 重设数组到它的初始状态 [1, 2, 3]。回归到本题,我们既然要找[0,i]之间的随机数,我们只需要random.nextInt(i+1)即可。当我们从后往前遍历的时候,我们遍历到第i个位置上时,我们就去找在[0,i]里面的一个随机数。在r.nestInt()中的括号里,可以填写想要输出的随机数的范围。原创 2024-05-17 21:52:02 · 274 阅读 · 0 评论 -
背包问题(01,完全)
1:背包问题的难点不是在于这个状态转移方程,难得是初始化和确定遍历顺利这两步。2:背包问题的滚动数组的方式是由二维数组压缩而来的,碰到题目可以先尝试把二维数组的代码写出来。3:至此,01背包的题目算是刷的差不多了,我感觉能用01背包解决的题目都有一个共同点:就是要分堆,题目的不同就是分堆规则的不同,和我们要求的东西的不同而有来不及休息了,接下来要登场的是。原创 2024-04-30 10:56:04 · 687 阅读 · 0 评论 -
排序算法理解
2:增加了flag标志,这个很容易理解,看之前的结果,其实数组已经排好了,不过因为i和j还没到终止条件,所以循环还在接着做,我们设置一个flag,如果数组中没有发生任何交换,我们就break。其实和插入排序对比起来看,插入排序的增量是1,所以j的变化是j--,在希尔排序中,有不同的增量,3:希尔排序可以用于对链表进行排序,由于链表的特殊性质,插入排序的效率较低,而希尔排序可以通过对链表的节点进行分组来提高排序效率。{8,7,6},{5,9},{4,1},{2,3},然后对每个小组进行分别排列。原创 2024-04-01 17:00:48 · 647 阅读 · 0 评论 -
回溯算法理解
回溯算法三大步骤:1:递归函数参数返回值2:终止条件的确定3:单层递归逻辑void backtracking(参数) {if (终止条件) {存放结果;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表);// 递归回溯,撤销处理结果回溯法用来解决n个for循环问题。原创 2024-03-31 22:44:32 · 687 阅读 · 0 评论 -
字符串算法理解
字符串其实只是一种数据结构,非常常见的数据结构,不过因为我自己使用java写的算法,感觉java中的字符串包还是优点不同的:JAVA中的String类和StringBuilder类java中的String内容是不可以改变的,java中的StringBuilder内容是可以变的i++;j++;j=0;举个例子很简单明白:比如主串是aabaabaaf字串是aabaafi,j。原创 2024-03-31 20:51:33 · 985 阅读 · 1 评论 -
哈希算法理解
哈希算法:哈希算法适用于查找一个元素是否在一个集合中。可以设想一个在一个数组里面,你想查找一个值,那时间复杂度就是O(n),哈希表就是用键值对(key,value)的方法,将查找一个值的时间效率提高到O(1)。哈希表的理解:其实随着我写算法题的增多,哈希表基本上是用来当成一个工具,就不会说有什么题目专门可以用哈希算法来写。哈希表本质其实就是一个数组,但在java里面有另外两种哈希的容器:HashMap和HashSet。原创 2024-03-31 19:48:54 · 111 阅读 · 0 评论