算法
文章平均质量分 67
m0_58841665
这个作者很懒,什么都没留下…
展开
-
快慢指针解决链表问题以及常见链表算法题分享
假设给你一个链表的头节点如果要求你只能遍历一遍链表把这个链表的中中点找出来那应该怎么做呢?这时候我们就可以使用快慢指针来做了首先我们先创建两个和头节点一样的两个引用,我们一般正常遍历不是一个一个节点的遍历吗,我们把这个两个引用其中一个每次走一步,另一个节点每次走两步,当每次走两步的节点走到尾节点时每次走一步的那个引用所在的位置就在中点位置,这两个引用一个是另一个的两倍所以当快的那个引用走到终点时慢的引用就走了一半。原创 2022-10-08 09:33:31 · 116 阅读 · 0 评论 -
动态规划介绍及算法题
给定两个数组一个数组记录物品的价值,一个数组记录物品的重量,数组的下标代表物品的编号,再给定一个背包能装下的最大重量,求出可以取得的最大价值数。这次我们直接把它改成用数组来计算,可以看到每次传入递归函数的变量有两个,因此我们可以创建一个二维数组来记录。这道题我们可以直接进行暴力递归来算,就是把每一种情况的算出来然后找出最大值。经过分析后可以知道,这个递归函数有重复计算过程因此我们可以进行优化。接下来我们来分析一下每次计算一个数的是由有没有重复计算的过程。这里是用递归来实现的;同样的我们来进行优化。原创 2022-10-06 19:55:20 · 99 阅读 · 0 评论 -
并查集实现以及相关题目
上图就是一个方阵(0,2)的下标是1,(0,3)的下标是1说以0,2,3是属于同一个集合(1,3)的下标是1,又因为3是属于0,2,3这个集合所以要把1也并进去所以0,1,2,3是一个集合;4和其他的数组合都没出现1所以4是单独的一个集合;给定一个方阵求其中一共有几个独立的集合。这道题就可以用并查集来解决。所以最终的答案就是2。原创 2022-09-27 10:37:05 · 82 阅读 · 0 评论 -
归并排序实现以及归并排序改写解决算法题
然后再把左右组继续分成新的左组右组,直到左组右组有序(左组和组内分别为都只有一个元素),然后将这两个有序的左右组有序的合成一个数组,就是图片中绿色部分的过程;而这种题的特征往往和关键字“左”或者“ 右”有关,因此我们以后做到数组题,题目里有左右关键词可以考虑下归并。解题思路:题目说的是把数组左边小的数加起来,我们可以转换成找出右边大的数有几个然后用个数乘当前的数字;2.同样的我们很容易可以看出第一题的核心就是找出右边大的数;所以最后的和就是:1X3+3X1+2X1+4X0 = 8;右边比3大的数有1个;原创 2022-09-07 20:29:50 · 151 阅读 · 0 评论 -
几种运算符的用法和性质以及相关的经典题目
从右到左数第二个位置就是第一次出现1的位置 aa是一个数 将aa进行这样操作 :aa&(-aa),这样就能找的最右变第一次出现1的位置了,假设a ^ b这个数从右数第二个位置第一次出现1 那么对应的·a和b这两个数的二进制第二个位置对应必定是一个位置是0,一个是1;第三步将这个数组分成两组,一组是第二个位置为1的一组是不为1的,那么出现奇次数的两个数就分别在这两组中,然后将这两组数分别异或起来就能得到出现奇数次的那两个数了。第二步:判断出a ^b 这个数的二进制最右边第一次出现1的位置。原创 2022-09-04 12:54:12 · 210 阅读 · 0 评论 -
数组不用有序也能用二分法分享以及几种排序的介绍
选择排序的思路:假设定义一个数组,数组长度为n 下标是0到n-1第一步从0到n-1下标中找出最小的数放到0下标的位置第二步从1到n-1下标中找出最小的数放到1下标的位置………第n-1步 从n-2到n-1下标中找到最小的放到n-2下标位置这样的话我们就可以排好一个数组时间复杂度O(n^2)i ++) {j ++) {} }原创 2022-09-04 00:56:59 · 295 阅读 · 0 评论