
算法学习
主要写一下算法的学习心得以及对应的算法代码,学习使用
Smileassissan
好好学习,天天向上,做一个安全测试追风少年
展开
-
练习:合并数组
【代码】练习:合并数组。原创 2024-08-19 21:56:24 · 152 阅读 · 0 评论 -
练习:搜索插入位置
思路:由于是有序数组,并且要使用O(log n)的算法,那么就只能使用二分法了,for循环的话是O(n);如果刚好是数组中存在的,那么二分法直接返回即可,但是如果二分法没有找到的话,可能就需要返回low值。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。原创 2024-08-04 22:41:40 · 235 阅读 · 0 评论 -
练习:寻找数组的中心索引
然后看了一下题解,数组的总和是确定,那么只需要判断左边的两倍是不是等于总和就好了,果然算法题目考的还是思路,思路不对,代码难写不说,用例还不能百分百通过,现在修改一下代码重新跑一下看看,这下就是百分百通过了,数组我感觉主要还是要考虑到边界值的条件,要不然很难百分百通过。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0。数组中不存在满足此条件的中心下标。原创 2024-08-04 21:56:43 · 351 阅读 · 0 评论 -
java算法递归算法练习-数组之和
简单找个题目练习一下递归算法,输入一组数组,使用递归的方法计算数组之和。其实这个题目,用循环的方式也很简单就能解决,直接循环遍历一下相加就行了,但是我们用来练习一下递归。基线条件:当数组下标为0的时候,说明只剩一个值了,直接返回值就行。递归条件:长度大于0的话,就需要相加并递归调用,直到满足基线条件。先来找基线条件和递归条件。原创 2024-07-31 22:27:43 · 475 阅读 · 0 评论 -
java算法递归算法之选择排序
这边我们选择最左边的数组作为基准值,然后但是单指针的方式来标识基准值所在的位置,然后分别于基准值进行比较,小于基准值的,mark+1,然后参数交换,最后将基准值与mark位置的值进行交换即可。因此我们需要重复以上的步骤,分别对1和3也选择基准值进行分区,直到数组中最后只剩0个或者1个,那么就达到目标了,重复进行操作即可。那们我们需要写的代码,首先需要先确定一个基准值,然后把大于基准值和小于基准值的给找出来,进行递归调用。这边盗用一下别人的图,看图会更加的清清晰明了。原创 2024-07-31 22:07:47 · 354 阅读 · 0 评论 -
java算法之分而治之(D&C)-分土地
2、不断的将问题分解或者是缩小规模,直到符合基线的条件。比如题目的内容,进行分解, 可以分成两个64m的正方形以及一个64*40的长方形,然后接着对这个长方形缩小规模,剩一个40*24的长方形,接着缩小规模,剩一个24*16的长方形,再缩小规模,剩下一个16*8的长方形,这个长方形正好符合上面的基线条件,那么就可以知道题目最终能分成的最大的正方形的长度就是8。1、找出基线条件,最简单的就是,一条边的长度时另一条边的整数倍,这样的话,就可以直接得出最大的方块就是短边的长度。原创 2024-07-28 09:35:22 · 253 阅读 · 0 评论 -
Java算法之递归算法-如何计算阶乘的值
题目:使用递归算法计算阶乘的值,也就是5!=5*4*3*2*1,直接使用循环是非常简单的,这边练习一下递归算法。上一篇学了递归之后,练习一下递归算法。递归条件:x * f(x-1)基线条件:等于1的时候返回1。原创 2024-07-26 22:16:03 · 426 阅读 · 0 评论 -
算法之递归算法
递归是非常常见的一种算法, 也比较难以理解,简而言之,递归就是写了一个方法,方法中还调用了该方法,相当于自己调用自己,如果书写不当,就会有堆栈溢出的风险,无法跳出。所以我们编写递归函数时,必须要告诉他何时停止递归,这就是基线条件,而递归条件就是指函数调用自己。,也就是给一个输入,然后依次输出值并减一,直到为1的时候。这个时候我们可以用递归的方式来写,先理出递归的两个条件。递归条件:入参不小于0的话,则自己调用自己,入参减一。当输入为5的时候,可以看到,总共递归了五次。举个例子,如果要编写一个倒计时的函数。原创 2024-07-26 22:00:12 · 176 阅读 · 0 评论 -
算法之选择排序
什么是选择排序呢,就是给你一组无序数组,进行排序,那么从第一个数开始,依次与后面的数进行比较,如果找到最小的,就放在第一位,然后从第二个再进行比较,放在第二个,重复以上操作,直到找到最后一个数,这样就完成了由小到大的一个排序,由大到小也是一样的。本来的想法是找到一个最小的,直接从原来的数组中删除,然后放到新的数组中就好了,但是由于java中的数组删除一个数很麻烦,因此这边直接需要新建个swap方法,专门用来进行数组中的数进行交换使用。输入一组无序数组,然后进行从小到大的排序,并输出最后的结果。原创 2024-07-20 21:54:28 · 503 阅读 · 0 评论 -
算法学习之二分法
而是核心算法就是从数组的中间开始查找,定义数组的low和high,分别是0和数组的长度减一,然后从中间开始比较,如果大了,则更新high,小了话则更新low,这样的话每次都能去除掉一半的数。二分查找的运行时间为。输入一行有序数组,和一个目标数字,使用二分法查找有序数组中是否存在该目标数字,存在时输出查找次数和序号,如果找不到则输出查找次数以及未找到对应的数。,也就是2的对数,比如8个数,3次就可以找到,16个数,4次就可以找到,当数越大时,节约的时间越多。原创 2024-07-20 21:27:03 · 304 阅读 · 0 评论