前端算法专栏
文章平均质量分 83
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
狮子座的男孩
技术不分家,都需要深挖!
展开
-
10、JS实现:数组四数之和算法的解决方案(一步一步剖析,很详细)
其一、代码为:其二、截图为:其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!其二、若有转发或引用本文章内容,请注明本博客地址() https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!其三、有兴趣的话,可以多多关注这个专栏(Vue(Vue2+Vue3)面试必备专栏)():https://blog.csdn.net/weixin_43405300/category_11525646.html?spm=1001.2014.3001.5482原创 2024-04-09 08:00:00 · 468 阅读 · 0 评论 -
09、JS实现:数组三数之和算法的解决方案(一步一步剖析,很详细)
所以返回值为:[ [ 1, 4, 10 ], [ 1, 5, 9 ], [ 1, 6, 8 ], [ 2, 3, 10 ], [ 2, 4, 9 ], [ 2, 5, 8 ], [ 2, 6, 7 ], [ 3, 4, 8 ], [ 3, 5, 7 ], [ 4, 5, 6 ] ]所以返回值为:[ [ -10, 3, 7 ], [ -6, -2, 8 ], [ -6, -1, 7 ], [ -2, -1, 3 ] ]给定 nums = [2, 3, 5, 6, 11, 15], target = 8;原创 2024-04-01 08:45:00 · 762 阅读 · 2 评论 -
08、JS实现:数组两数之和算法的两种解决方案(一步一步剖析,很详细)
对于这道题,我们很容易想到使⽤两层循环来解决这个问题,但是两层循环的复杂度为O(n2),但也能解决该问题,当然,我们也可以考虑能否换⼀种思路,减⼩复杂度。● 再计算第⼆个数字与 target 的差值,并与 map 对象中的数值进⾏对⽐,若相同,直接返回,若没有相同值,就将这个差值也存⼊ map 对象中。给定⼀个整数数组 nums 和⼀个⽬标值 target,请你在该数组中找出和为⽬标值的那 两个 整数,并返回他们的数组下标;给定 nums = [2, 7, 11, 15], target = 9;原创 2024-04-01 08:00:00 · 981 阅读 · 0 评论 -
07、JS实现:用回溯法实现数组全排列的算法(一步一步剖析,很详细)
然后继续从 [1,2,3] 选取⼀个数,并且这个数不能是已经选取过的数。给定⼀个 没有重复 数字的序列,返回其所有可能的全排列。重复这个过程直到选取的数字个数达到了 3。先从 [1,2,3] 选取⼀个数。输⼊: [1,2,3]原创 2024-03-27 17:21:41 · 435 阅读 · 0 评论 -
06、JS实现:用双数组实现接雨水的算法(一步一步剖析,很详细)
上⾯是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的⾼度图,在这种情况下,可以接 6 个单位的⾬⽔(蓝⾊部分表示⾬⽔);答:可以计算接雨之后的水位,减去 height 数组原本的高度,就是 height 数组每一项所能接的水数;给定 n 个⾮负整数表示每个宽度为 1 的柱⼦的⾼度图,计算按此排列的柱⼦,下⾬之后能接多少⾬⽔;上图中 height 数组的每一项所能接的水数,依次求和,然后相加就将是最终的输出结果;输⼊: [0,1,0,2,1,0,1,3,2,1,2,1]原创 2024-03-27 17:20:38 · 512 阅读 · 0 评论 -
05、JS实现:用回溯法实现组合总和的算法(即:使数组某些值的和为目标数值,重复/不重复)(一步一步剖析,很详细)
给定⼀个⽆重复元素的数组 candidates 和⼀个⽬标数 target ,找出 candidates 中所有可以使数字和为 target 的组合;这种题⽬其实有⼀个通⽤的解法,就是回溯法。输⼊:candidates = [2,3,6,7], target = 7,输⼊:candidates = [2,3,5], target = 8,candidates 中的数字可以⽆限制重复被选取。candidate 中的每个元素都是独⼀⽆⼆的。法,这⾥的所有的解法使⽤通⽤⽅法解答;解集不能包含重复的组合;原创 2024-03-25 15:10:00 · 369 阅读 · 0 评论 -
04、JS实现:用⼆分法思想实现搜索旋转排序数组(一步一步剖析,很详细)
/ 调用的函数为:searchPermutation([13, 14, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], 16),此时的返回值为:-1;(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。// 调用的函数为:searchPermutation([6, 7, 8, 1, 2, 3, 4, 5], 5),此时的返回值为:7;输⼊:nums = [4,5,6,7,0,1,2], target = 0。原创 2024-03-25 15:09:12 · 965 阅读 · 0 评论 -
03、JS实现:用贪心思想实现下⼀个排列的算法
其三、再将 nums[i] 与 nums[nums.length - 1] 之间的数组值来进行反转 (即:将 nums[i] 与nums[nums.length - 1] 之间的数组值从降序排列反转成升序排列);其二、若在数组中能找到回溯值,就将 nums[i] 与 nums[nums.length - 1] 之间的大于 nums[i] 的最小的值与 nums[i] 交换;其一、需要将整个数组从后向前找到第一个逆序(即:非降序)的值 nums[i],此时的 nums[i] 就是下一个排列的回溯值;原创 2024-03-20 08:45:00 · 543 阅读 · 0 评论 -
02、JS实现:使用二分查找实现两数相除的算法(要求:不使⽤乘法、除法和 mod 运算符)
整数除法的结果应当截去(truncate)其⼩数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2。符合直觉的做法是:减数⼀次⼀次减去被减数,不断更新差,直到差⼩于 0,我们减了多少次,结果就是多少。解释: 7/-3 = truncate(-2.33333…输⼊: dividend = 10, divisor = 3。输⼊: dividend = 7, divisor = -3。二分法的本质:有序数组查找指定的值;原创 2024-03-20 08:30:00 · 692 阅读 · 0 评论 -
01、JS实现:去除数组中重复项的算法之一
函数应该返回新的⻓度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。A、这道题如果不要求,O(n) 的时间复杂度, O(1) 的空间复杂度的话,会很简单。// 此时 fastP 及 slowP 的值对应的 nums 的值就是最终的数组值;函数应该返回新的⻓度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。D、当快指针⾛完整个数组后,慢指针当前的坐标加 1 就是数组中不同数字的个数;给定 nums = [0,0,1,1,1,2,2,3,3,4],原创 2024-03-15 12:02:00 · 599 阅读 · 0 评论