前端算法
前端卡卡西呀
前端程序员。面向搜索引擎开发,熟练掌握CV大法的拷贝程序员---前端卡卡西
展开
-
算法系列:5. 二分搜索
/** * @Desc 二分搜索 * 二分搜索 前提是 有序数组 * 从数组中间值开始,如果中间值正好等于搜索值,结束搜索; * 如果搜索值比 中间值大或小,则在大于或小于中间值的那一半数组中继续搜索 */Array.prototype.binarySort = function (selector) { let low = 0; let high = this.length - 1; while(low <= high) { let midInd原创 2021-11-27 22:35:41 · 324 阅读 · 4 评论 -
算法系列:4. 快速排序
/** * @Desc 快速排序 * 分区:在数组中任意选择一个 ‘基准’,所有比基准值小的放到基准值前边,比基准值大的放在基准值后边 * 递归的对基准前后的数组 进行 “分区” */Array.prototype.quickSort = function() { const rec = function(arr) { if (arr.length <= 1) { return arr; } const原创 2021-11-04 13:42:29 · 226 阅读 · 1 评论 -
算法系列:3. 归并排序
/** * @Desc 归并排序 * 时间复杂度:O(n*logN) * 分:将数组劈成两半,再递归 对子数组执行‘分’操作,直到分成一个个的数 * 合:将两个数合并成一个有序数组,再对有序数组进行合并,直到全部子数组合并成一个完整的有序数组 * 新建一个空数组res,用来存放最终排序后的数组 * 比较两个有序数组的头部,较小者出队并推入res * 如果两个数组还有值,就重复第二步 */Array.prototype.mergeSort = function() { con原创 2021-10-24 14:44:25 · 211 阅读 · 0 评论 -
算法系列:2. 插入排序
/** * @Desc 插入排序 * 时间复杂度:O(n^2) * 从第二个数开始往前比 * 有比第二个数小的,往后排 * 从第三个数开始往前比,有比它大的往后排 * 以此类推 进行到最后一个数 */Array.prototype.insertSort = function() { for (let i=1;i<this.length; i+=1) { let temp = this[i]; let j = i; while原创 2021-10-15 14:34:36 · 138 阅读 · 1 评论 -
算法系列:1. 选择排序
/** * @Desc 选择排序 * 时间复杂度:O(n^2) * 找到数组中最小的值,选中它并将它放到第一位; * 找到数组中第二小的值,选中它并将它放到第二位; * 以此类推,执行 n-1 轮 */Array.prototype.selectSort = function () { for (let i=0;i<this.length;i+=1) { let minIndex = i; for (let j = i; j < this.原创 2021-09-29 10:17:42 · 166 阅读 · 0 评论 -
aaabbaaacc 最长连续子序列
问题描述:给定一个字符串 如 'aaabbaaacc', 输出它的最长连续子序列解题思路:遍历这个字符串,用一个map 对象存储字符和重复次数,字符为key,重复次数为value;最后遍历该map对象,取出重复次数最大的即可。代码实现:let str = 'aaabbaaacc';function getmax(str) { if (str.length < 2) return ('重复次数最多的是'+str+',重复了:'+str.length + '次'); /原创 2020-12-30 11:04:15 · 492 阅读 · 0 评论 -
js数组全排列(leetcode 46题)
题目链接问题描述:给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:让每一个元素放一次第一位,后边元素排列组合var permute = function(nums) { let res = []; per(nums,0,nums.length-1,res); retur...原创 2020-07-16 13:11:22 · 1352 阅读 · 1 评论 -
剑指 Offer 38. 字符串的排列
问题描述:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]var permutation = function(str) { let res = new Set(); // 使用set结构去重存储 let path = []; // 存储路径 let visited = []; // 标记访问原创 2020-07-16 12:55:16 · 173 阅读 · 0 评论 -
JS数组乱序的几种方法
1. 使用sortfunction shuffle(arr) { return arr.sort(() => Math.random() - 0.5)}2.洗牌算法先从数组末尾开始,将最后一个元素与前边任意随机元素交换位置;在已经排好的最后一个元素以外的位置中,随机产生一个位置,让该位置元素与倒数第二个元素进行交换;循环操作...function shuffle(arr) { for (let i=arr.length;i;i--){ //原创 2020-07-15 11:11:40 · 1492 阅读 · 0 评论