
算法
老古懂
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
「算法学习」:扁平数据结构转tree、数据结构扁平化
扁平数据结构转tree、数据结构扁平化原创 2022-08-09 15:37:10 · 653 阅读 · 0 评论 -
「算法学习」:删除有序数组中的重复项
删除数组中重复项原创 2022-06-08 10:16:38 · 1818 阅读 · 0 评论 -
「算法学习」:求数组所有子集
数组子集求解原创 2022-06-06 09:41:06 · 339 阅读 · 0 评论 -
「算法学习」:最小覆盖字符串
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”输入: s = “a”, t = “aa”输出: “”解释: t 中两个字符 ‘a’原创 2022-05-23 09:44:15 · 392 阅读 · 0 评论 -
「算法学习」:js手写快速排序、冒泡排序、选择排序
快速排序快排思想:第一步:选择第一个数字分离出来为基数(数组第一个或者中间数字)第二步:然后通过首尾指针遍历将序列中大于基数的放在基数右边,小于基数的放在基数的左边第三步:然后对基数的左边和右边两个序列重复第二步和第三步,排序完成//传入两个指针初始位置是为了更好的递归function sort(arr, begin, end) { //双指针未交叉时此轮遍历继续,直至交叉后遍历完成此时基数左边是小于基数数组,右边为大于选中基数数组 if (begin < end) { //原创 2022-05-18 15:30:56 · 560 阅读 · 0 评论 -
「算法学习」:求平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。来源:力扣(LeetCode)输入:x = 8输出:2解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。解这道题目运用牛顿迭代法会快速很多,但是此时有个问题,什么是牛顿迭代法?Good question,我也不会,大写的尴尬但是我们只是运原创 2022-05-13 09:55:13 · 619 阅读 · 0 评论 -
「算法学习」:二进制加法求和
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。题目来源:力扣输入: a = “11”, b = “1”输出: “100”输入: a = “1010”, b = “1011”输出: “10101”/** * @param {string} a * @param {string} b * @return {string} */var addBinary = function(a, b) { const res = [];//结原创 2022-05-12 10:46:03 · 284 阅读 · 0 评论 -
「算法学习」:数组转字符串加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。题目来源:力扣(LeetCode)输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。输入:digits = [5,9,9,9]输出:[6,0,0,0]解释:输入数组表示数字 6000。var plusOne = function(digits) { //先设一原创 2022-05-07 09:44:49 · 252 阅读 · 0 评论 -
「算法学习」:区间合并,多区间重合合并
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。题目来源:力扣(LeetCode)输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].算法思想:首先对区间数组依照左闭合原创 2022-04-24 10:16:32 · 1513 阅读 · 0 评论 -
「算法学习」:贪心算法找零问题
找零算法,找零???假设你是一个商店老板,你需要给顾客找零n元钱,你手上有的钱的面值为:100元,50元,20元,5元,1元。请问如何找零使得所需要的钱币数量最少?例子:你需要找零126元,则所需钱币数量最少的方案为100元1找,20元1张,5元1张,1元1张。具体思路:假设我们需要找零126元,我们先从面额大的钱比较,我们发现126比100大,除法计算可以找一张100块,然后还有26元,继续按照上面的方法去找其他面额的钱币,发现20比剩下的钱小,那再找一张20的,还剩6块,继续找一张5块的和1块原创 2022-04-11 17:51:42 · 5547 阅读 · 0 评论 -
「算法学习」:最长有效括号
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。题目来源:力扣(LeetCode)输入:s = "(()"输出:2解释:最长有效括号子串是 "()"在此方法中,我们利用两个计数器 left 和 right 。首先,我们从左到右遍历字符串,对于遇到的每个 ‘(’,我们增加 left 计数器,对于遇到的每个**‘)’** ,我们增加 right 计数器。每当 left 计数器与 right 计数器相等时,我们计算当前有效字符串的长度,并且记录目前为止找到的原创 2022-04-11 14:49:44 · 992 阅读 · 0 评论 -
「算法学习」:实现 strStr(),字符串匹配
算法题目来源:力扣(LeetCode)实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。/*我们可以让字符串 needle 与字符串 haystack 的所有长度为 m 的子串均匹配一次。为了减少不必要的匹配,我们每次匹配失败即立刻停止当前子串的匹配,对下一个子串继续匹配。如果当前子串匹配成功,我们返回当前子串的开始位置即可。如果所有子串原创 2022-04-01 09:37:22 · 423 阅读 · 0 评论 -
「算法学习」:删除有序数组中的重复项( 空间复杂度O(1) )
算法题目来源:力扣(LeetCode)给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空原创 2022-03-31 11:32:13 · 883 阅读 · 0 评论 -
「算法学习」:有效括号、括号匹配
算法题目来源:力扣(LeetCode)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。/*判断括号的有效性可以使用「栈」这一数据结构来解决。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。此时,我们可以取出栈顶原创 2022-03-30 13:53:52 · 1048 阅读 · 0 评论 -
「算法学习」:两数之和、三数之和、四数之和JS(双指针)求解
算法题目来源:力扣(LeetCode)两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。/** * @param {number[]} nums 目标数组 * @param {number} target 目标值 * @return {number[]} */const twoSum = (nums, target) => { const len = nums.length原创 2022-03-28 13:40:14 · 839 阅读 · 0 评论 -
「算法学习」:电话号码的字母组合
算法题目来源:力扣(LeetCode)给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。/** * @param {string} digits * @return {string[]} */var letterCombinations = function(digits) { // 为空特殊处理 if (digits.length === 0) return [];原创 2022-03-25 15:27:21 · 220 阅读 · 0 评论 -
「算法学习」:最接近的三数之和
算法题目来源:力扣(LeetCode)给定一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。/*输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。*//** * @param {number[]} nums * @param {number} target * @return {num原创 2022-03-23 16:15:58 · 506 阅读 · 0 评论 -
「算法学习」:三数之和
算法题目来源:力扣(LeetCode)给一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。//输入:nums = [-1,0,1,2,-1,-4]//输出:[[-1,-1,2],[-1,0,1]]/** * @param {number[]} nums * @return {number[][]} */var threeSum = function(nums) { //原创 2022-03-23 16:06:42 · 268 阅读 · 0 评论 -
「算法学习」:求最长公共前缀
算法题目来源:力扣(LeetCode)编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function(strs) { //直接取数组第一项作为起始对比 let ans = strs[0]; for(let i =1;i<strs.length;i++) { let j原创 2022-03-23 15:42:45 · 584 阅读 · 0 评论