算法
文章平均质量分 76
兰舟千帆
不会在csdn上发布任何文章了。
展开
-
冒泡排序以及一些优化
冒泡排序就不必说了,大家都比较熟悉了。本篇的目的就是简单将冒泡排序的算法记录下来,另外还是学习笔记啦,学习这种东西还得记录下来。主要还是有些升级的地方。学习需要保持谦虚。主要思维还是外层控制总体的比赛轮数,内层控制交换次数。我们的每一轮实现的结果就是将一个最大的的排到最后。每一轮进行额细节就是内层的交换,而内层的交换比较就是实现每轮将最大的元素移到后面的这样的一个过程。原创 2022-10-11 17:20:47 · 665 阅读 · 0 评论 -
力扣刷题之求两数之和
这样去找,我们进行了重复的遍历值,从这个小计算量就可以发现我们一共用了5次13,而我们如果用hashmap,我们就只经过它一次,将它记录,然后后面就可以直接找到它。于是我们尝试这样去解决问题,能不能再遍历到这个元素之后,我们就把他记下来,然后下次用的时候不是直接用,这样多好。按照这样的逻辑的话,我们还是用到了双重for循环,在查找目标值的时候,我们准会遍历到曾经遍历过的元素,这就是重复。题目的要求是给定一个数组,给定一个目标值,然后让你在数组中找到两个值的和等于目标值,然后返回它们的下标。...原创 2022-07-31 22:41:22 · 524 阅读 · 0 评论 -
力扣刷题之合并两个有序数组
比较开始,如果一号指针指向数组的表头索引处的元素的值大于第二个的头部,那么我们将数组二头部的元素给到临时数组头部。比较这三种做法呢,第一种比较耗时,因为存在一个打乱后后的再排序,后两种会使用类似指针的移动索引比较,没有打乱原本数组的有序,效率都非常高,但是第三种是没有使用临时数组,所以第三种的空间复杂度比较低,占用内存少。到了这一步的时候,我们的3也给了临时数组,这个时候后面的元素不是有效的了,所以我们就直接将num2剩余的元素给到临时数组。到这里呢,如果nums1的元素较大的话,我们会让它后移。...原创 2022-07-31 20:21:03 · 729 阅读 · 0 评论 -
力扣刷题之爬楼梯(7/30)
其实可以思考一下,我们的递归简单的有没有去优化的方法,可以这样去思考一个问题,比如我们计算从第一层到第五层的方法数,我们需要在递归里面用f(4)+f(3),然后这两层就一直递归到借宿条件,所以这里存在重复的计算。这样就确定了一个递推的公式,我们可以递归去计算,但是要考虑递归的出口,当n等于2的时候需要去直接给定一个值为2,因为计算f(0)是不合理的,所以我们这样去考虑了。然后他就一直计算下去了,我打赌,他之前的方法一定是超时了,所以才这样去超出三界的方式去解题了。我们可以首先这样去做,是这样的一个逻辑。..原创 2022-07-30 23:08:30 · 454 阅读 · 0 评论 -
力扣刷题之有效的正方形(每日一题7/29)
菱形的对角线是互相垂直平分的,我们只要在让它的对角线相等,就可以判断为正方形。因为如果四个点的横纵坐标都为0的话,上面的要求其实是都可以满足的。提示我也没有去用,因为我采用的是完全的纯数学计算,用到了坐标的特点。对坐标四点判断是否构成平行四边形,需要判断对可能情况的对角线的中点是否重合,那么这里只要分别计算横纵坐标死否分别相等就行。给定2D空间中四个点的坐标p1,p2,p3和p4,如果这四个点构成一个正方形,则返回true。这里的垂直用到了向量的特点。完全的对对角线的约束。...原创 2022-07-29 16:09:17 · 525 阅读 · 0 评论 -
力扣刷题之数组序号计算(每日一题7/28)
不过这个无所谓,我用这个数据结构的目的就是为了存储排序后的数组的值。因为这样的其实是一个指针的指向,指向原来数组的地址,当然一个数组变,另一个也会变。如果出现相同的数,它其实是不要存储的,但是你的按照这个索引i还是会变大,这样是不对的。自己定义了数组进行的测试,在力扣提交的时候只需要将自己定义的重复的数组删掉,最后要返回一个最终的数组。如下,首先对当前数组进行了排序,这个默认是从何小到大排序的,题目实际的要求也是这样,所以不用修改默认。排序后的数组中的元素一定是按照顺序排列的,是从小到大排序的。...原创 2022-07-28 20:31:28 · 655 阅读 · 0 评论 -
力扣刷题之分数加减运算(每日一题7/27)
假如遇到了10,我们的首先获取到的是1,然后我们转换了为数字1,假如你没有乘以10,那么现在就是1,我们后面再移动一位是0,那么你这会接收到的就是0,这样你是无法正确接收到分子的。后面我们会获取输入的字符串的分子和分母,然后利用公式去计算。是因为如果分子是10,上面已经说了,我们的分子的范围可以取到10,那么要取到这个分子10就必须扩展位数,如果你的分子小于10的话大可不必用num处理。这次是求分母和分子的最大公约数,这里要注意分子的符号,我们这里是不要符号的,符号的最终我们用之前的符号的标记变量。...原创 2022-07-27 18:46:35 · 699 阅读 · 0 评论 -
串的概念相关及模式匹配
串的定义:串是由零个或多个任意字符组成的序列。我们通常这样定义:s = “a1,a2,a3…,an”s代表串的名字,用双引号括起来的是串的值。其中串含有字符的数目称为串的长度。当然串可以为空,那么,就是不含有任何字符。还有要注意的是,由 一个或者多个空格组成的串称为空格串。还有就是有关子串和主串的概念。我们这样加以区分:串中任意连续的字符组成的子序列称为该串的子串。包含子串的串称为主串。很好理解。我们来举个例子我们来随便写几个串:a = “1,2,3” b=“4,5,6” c=“1,2”原创 2020-09-04 20:12:55 · 1184 阅读 · 0 评论 -
队列的基本操作
这一章我们来看队列队列的概念:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。其实我们来对比栈,栈的特点是只能在一端进行操作的,而队列是一端插入一端删除。用一句很有歧义却很形象的话来讲两者的区别就是:栈就是插进去抽出来,而队列是插进去吐出来。我们还是上图来更加直观的看队列队列分为两种,一种是顺序队列,一种是循环队列。其实从存储原创 2020-09-03 16:12:00 · 1706 阅读 · 0 评论 -
栈的基本操作
我们先来看数据结构所包含的内容栈无疑是数据结构中非常重要的一种存储结构。我们今天来介绍栈什么是栈?栈是只能在表的一端进行数据存取的数据结构。我们来看图示。其实还是很好理解的。我们来回顾下顺序表和链表,我们将栈与之对比。顺序表的定义顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存原创 2020-09-02 21:40:18 · 3632 阅读 · 0 评论 -
递归算法的典型程序,分形树的绘制和汉诺塔的问题解决。
在程序中,程序自身调用自身的这种技巧称为递归。我们来通俗的讲一下递归,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山…我们小时候应该都听过这样的故事,大家想想,这个故事如果以我们程序的思维来看是不是递归?当然,这的确很想递归,因为老和尚在一直讲故事,这就像在调用自身老和尚讲故事这个函数,但我要告诉大家的是,放在我们程序里,这还真的不叫递归!我们总是认为递归就是不断的调用自己,但事实上我们忽略了一个重要的条件,程序中的递归应该有终止条件,如原创 2020-08-13 09:25:25 · 664 阅读 · 0 评论