
算法
文章平均质量分 50
仙女爱吃鱼
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
js查找结构不同的两个数组中相同的元素并删除元素
准确的是循环中删除数然后我们当前的需求是在两个 数组中找重复的元素删掉,虽然两个 数组结构不一样,但是逻辑是一样的,最外卖使用forEach循环或者for循环都可以,把要操作的数组放内循环即可。删除后需要注意元素的索引值 ,比如以下案例,删除2之后索引值继续 + 1,但原数组索引已经变化了,所以会出现遍历漏掉元素和索引值对不上的情况。即每次删除之后都使索引值 i - 1,但每次删除数组元素后都需要重新调整数组的索引,如果数组元素比较多的话,性能就会很差。先从数组长度-1索引出发,逐渐减小索引值,来访问数组。原创 2023-08-29 16:40:11 · 435 阅读 · 0 评论 -
【算法】把数组拍平
1.一层嵌套的数组 - concatconcat方法创建一个新的数组该数组由被调用数组和参数元素组成。如果参数是数组,而数组本身的元素中也包含数组,则元素数组不会被递归展开。如果参数是对象,那么新数组中的元素只是参数对象的浅拷贝。如果参数是字符串、数字或布尔值,则该方法将这些值复制到新数组中。let arr = [1,2,[3,4],5,6]Array.prototype.concat.call([], …arr)Array.prototype.concat.apply([], arr)原创 2022-04-13 20:37:42 · 520 阅读 · 0 评论 -
【算法】原地移除数组中指定元素
原地移除数组中指定元素,与传入元素重合的元素,使用双指针,与下标退位法原创 2022-10-10 15:26:36 · 395 阅读 · 0 评论 -
【算法 】判断数组元素是否成对出现
给你一个整数数组。您的任务是创建它们的对,使得每对由相等的数字组成。每个数组元素只能属于一对。是否可以使用所有的整数?写一个函数:函数解(A)如果数组A包含N个整型数,返回是否有可能将所有整型分拆成对使用。给定A=[1,2,2,1],您的函数应该返回True,因为它们是(A[0])。A[3])(两者都有1)和(A[1])。A[2])(两者都有值2)给定A=[7,7,7],你的函数应该返回False,因为你可以生成一对数字7,但你仍然有一个数字7如果A=[1,2,2,3] 你的函数应该返回原创 2022-05-10 15:21:39 · 430 阅读 · 0 评论 -
二叉树中序遍历
解题思路一:递归1.递归调用,不断把子孙左节点传入,直到最后一层再无左节点的值2.打印当前节点值2.判断有无右节点,如果有的话重复步骤【1】【2】【1】向函数传入{2,1,3} 这个左子树,发现还有左节点{1}再调用【2】左节点{1}没有子左节点了,退出函数,【3】打印{1}【4】节点{1}没有右子树了,退出函数,代表我们当前左子树遍历完成【5】打印当前节点{2}【5】传入右子树遍历,重复步骤/** * Definition for a binary tree node. * fun原创 2022-04-24 18:33:33 · 159 阅读 · 0 评论 -
【算法】二叉树的先序遍历
二叉树树中每个节点最多只能有两个子节点在js中通常用object来模拟二叉树二叉树为【1,2,3,4,5,6,7】const bt = { val: 1, left: { val: 2, left: { val: 4, left: null, right: null }, right: { val: 5, left: null, right: null } }, right: { val: 3, left: { val原创 2022-04-10 22:13:28 · 1527 阅读 · 0 评论 -
【算法】最近的请求次数
933. 最近的请求次数写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。示例 1:输入:[原创 2022-04-08 16:21:43 · 245 阅读 · 0 评论 -
【算法】反转字符串
344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]提示:1 <= s.length原创 2022-04-06 21:40:56 · 326 阅读 · 0 评论 -
【算法】合并两个有序链表
21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非原创 2022-04-06 21:32:56 · 4467 阅读 · 0 评论 -
【算法】杨辉三角
118. 杨辉三角给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]]提示:1 <= numRows <= 30来源:力扣(LeetCode)首先我们来缕一下杨辉三角的规则:let egg=[原创 2022-04-04 16:00:43 · 648 阅读 · 0 评论 -
算法:寻找比目标字母大的最小字母
744. 寻找比目标字母大的最小字母给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’示例 1:输入: letters = [“c”, “f”, “j”],target = “a”输出: “c”示例 2:输入: letters原创 2022-04-03 22:56:00 · 213 阅读 · 0 评论 -
算法:千分位分隔数
1556. 千位分隔数给你一个整数 n,请你每隔三位添加点(即 “.” 符号)作为千位分隔符,并将结果以字符串格式返回。示例 1:输入:n = 987输出:“987”示例 2:输入:n = 1234输出:“1.234”示例 3:输入:n = 123456789输出:“123.456.789”示例 4:输入:n = 0输出:“0”提示:0 <= n < 2^31解题思路一:使用toLocaleString()方法,把数组转换为本地字符串,不解题思原创 2022-04-03 21:11:17 · 3961 阅读 · 1 评论 -
算法:回文链表
234. 回文链表给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例 1:输入:head = [1,2,2,1]输出:true示例 2:输入:head = [1,2]输出:false提示:链表中节点数目在范围[1, 105] 内0 <= Node.val <= 9我的解题思路判断回文链表、回文数字、回文字符、回文数组等都可以直接将原参数反转然后二者再进行比较,如果一模一样的话,就是成功的原创 2022-03-25 22:02:25 · 898 阅读 · 0 评论 -
算法:反转链表
206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000来源:力扣解题思路我们现在使用两个指针来反转单链表首先定义一个cur指针,指向头原创 2022-03-23 23:35:29 · 2858 阅读 · 0 评论 -
算法:删除链表节点
237. 删除链表中的节点请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。 题目数据保证需要删除的节点示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]原创 2022-03-17 22:08:45 · 6868 阅读 · 0 评论 -
算法:罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大原创 2022-03-17 19:18:28 · 1780 阅读 · 0 评论 -
算法:JS 中的链表简介
链表的概念首先我们需要知道链表的概念:多个元素组成的列表元素存储不连续, 用next 指针连在一起那我们数组和链表的区别是什么呢?3. 数组在增加或者删除非首尾元素时往往需要移动元素4. 链表在增删非首尾元素时不需要移动元素,只需要更改next 指针即可JS 中的链表js 中没有链表这个数据结构我们可以使用 object 对象来模拟链表模拟链表我们使用 object 中定义 val 值与添加next 属性得到如下一个链表遍历链表let p = a // 声明一个指针,指原创 2022-03-17 18:06:48 · 2203 阅读 · 0 评论 -
算法:整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大原创 2022-03-17 12:30:25 · 494 阅读 · 0 评论 -
算法:实现 strStr(),在字符串查找固定子串第一次出现的问题
实现 strStr() 函数,或者说实现c语言中的strStr,java、javascript中的indexOf方法原创 2022-03-16 22:09:54 · 225 阅读 · 0 评论 -
算法:归并排序(MERGE-SORT)
归并排序的含义与代码实现原创 2022-03-14 22:23:51 · 3428 阅读 · 0 评论 -
算法:存在重复元素
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。示例 1:输入:nums = [1,2,3,1]输出:true示例 2:输入:nums = [1,2,3,4]输出:false示例 3:输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true提示:1 <= nums.length <= 105-109 <= nums[i] <= 109原创 2022-03-11 22:15:19 · 400 阅读 · 0 评论 -
算法:有效的括号
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s原创 2022-03-11 20:54:49 · 2127 阅读 · 0 评论 -
算法:删除有序数组中的重复项
题目:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。判题标准:系统原创 2022-03-08 22:51:03 · 739 阅读 · 0 评论 -
算法:验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama” 输出: true解释:“amanaplanacanalpanama” 是回文串示例 2:输入: “race a car” 输出: false 解释:“raceacar” 不是回文串leetcode链接思路1、将文字中空串和特殊符号去掉并全部转换为小写2、反转字符串,如果和原创 2022-02-23 22:14:01 · 402 阅读 · 0 评论 -
算法:多数元素
多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。leecode 链接方法1循环一下数组,把每个元素出现的次数做个统计,最后返回出现次数>n/2的/** * @param {原创 2022-02-22 23:22:11 · 197 阅读 · 0 评论 -
算法:只出现一次的数字【javascript】
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4Leecode 链接这里使用异或运算符来解决问题,首先我们来理解一下异或运算符异或运算符主要是在位运算符的时候使用,当然十进制的时候也能用,就是有一个转换过程,现在我们假设一下计算过程(十进制->二进制->原创 2022-02-21 22:16:13 · 441 阅读 · 0 评论 -
算法:寻找两个正序数组的中位数
寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3原创 2022-02-11 00:26:07 · 733 阅读 · 0 评论 -
算法:最长公共前缀
思路将数组中的字符串按 ASSIC 码进行排序 ,然后只需要比较第一个元素和最后一个元素是否有相同的前缀就可以啦~ * @param {string[]} strs * @return {string} */var longestCommonPrefix = function(strs) { if (strs.length <= 1 ) { // 小于一个元素返回 return strs[0] } strs.sort() // 数组排序 let i , len = strs[0]原创 2022-01-13 21:06:42 · 122 阅读 · 0 评论 -
js 设置cookie一天内过期(包含24小时与一个自然日)
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-09-29 11:56:43 · 3492 阅读 · 0 评论 -
返回指定格式的日期字符串,判断是否是日期格式
/** * 对Date的扩展,将 Date 转化为指定格式的String 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 例子: (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 (new Date()).Format("yyyy-M-原创 2021-09-26 23:03:29 · 245 阅读 · 0 评论 -
数字格式化(判断是否数字、返回千分位、万化及小数)
/** * @定义 可判断是否是数字或者是数字字符串 * @引入 import {isNumber} from '@shared/utils/formatNumber' * @param {*} vluae 参数 * * @returns 返回一个false值 * @ex isNumber(number) *///判断是不是一个数字 或者 一个字符串里全是数字export function isNumber(value) { if (value === undefin.原创 2021-09-26 23:01:57 · 387 阅读 · 0 评论 -
javascript Optional chaining:可选链操作符(?.)的介绍与使用
javascript可选链接操作符(?.),检查属性链中是否存在某个成员,为预防访问不存在或者为空的变量时程序报错,可使程序更短更简洁。例:有如下对象let person = { name: 'joy', age: 18, address: { // country: 'CHINA', // city: { // city: 'beijing', // area: 'chaoyang' }, }, getInfo: function() { return `${th原创 2021-04-26 17:23:18 · 1407 阅读 · 2 评论 -
reduce对象数组去重
合并数组后去重 * 新建optionObj用以存放不重复的 id * item 为 reduce 方法多次执行的累积结果 * next 表示当前项 const optionObj = {}; appOptions = appOptions.reduce((item, next) => { if (!optionObj[next.id]) { optionObj[next.id] = true;原创 2020-11-28 00:06:12 · 454 阅读 · 0 评论 -
算法:合并两个有序数组(使用 On1)
题目:合并两个有序数组arr1=[1,3,5,7], arr2=[2,4,6,8,10,12,13],并且新数组也是有序的实现1.最简单:concat 合并后进行排序,但多了一步合并的操作(不写了吧,大家应该都会)?2.使用双层循环,时间复杂度为 On1// 先找出数组长度最大的元素放在外循环;let outsideArr = arr1, insideArr = arr2if (arr1.length < arr2.length) { outsideArr = arr2 inside原创 2021-03-19 13:32:40 · 298 阅读 · 0 评论 -
算法:限制函数并发
题目:限制函数在请求进程中的数量最大为 max 个,每当函数成功或者失败都算一次已经结束的请求,请求之后再添加(max-进程中数量)个到进程中。例:第一次5个函数在进程中,当前已经请求完成3个,这时候就要再添加5-3=2个请求到进程中来分析:定义一个并发进程计数器,使用 es6的 promise 函数,每次请求之前就把计数器+1,当 resolve 或 reject 后就把计数器-1,再从当前函数数组里删掉已经完成请求的函数,使用递归再次调用当前方法,就完成了自动添加未执行的函数到进程中原创 2021-03-18 17:32:38 · 358 阅读 · 0 评论 -
算法:插入排序
插入排序三种算法原创 2021-03-12 00:07:23 · 161 阅读 · 0 评论 -
算法:排序算法-冒泡与选择方法的分析与比较
方法1for(let i = 0; i < arr.length; i++){ for(let j = 0; j < arr.length; j++) { if (arr[i] < arr[j]){ temp = arr[j] arr[j] = arr[i] arr[i]=temp } }}方法2for(let i = 0; i < arr.length;原创 2021-03-06 22:50:28 · 137 阅读 · 0 评论 -
算法:单词顺序不变,只倒序排列单词中的每个字母,将how are you 变成 ohw era uoy
.将”how are you”变成”ohw era uoy”,即将字符串中的单词每一个字母都倒序排列,但单词顺序不变 思路:先将how are you 分隔成数组内的三个元素,然后将三个元素的单词顺序倒序排列var Str = 'how are you'myStr.split(' ')// 此处是空格分割var result = ''for (var i = 0; i < myStr.len原创 2018-05-02 10:06:19 · 1317 阅读 · 0 评论 -
算法:实现 atoi,将字符串转为整数。
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或原创 2021-03-04 22:05:52 · 591 阅读 · 2 评论 -
算法: 整数反转
题目给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0代码var reverse = function(x1) { let x原创 2021-03-04 00:35:49 · 127 阅读 · 1 评论