前端算法
文章平均质量分 57
算法记录常规的处理方式
Garbrielle
这个作者很懒,什么都没留下…
展开
-
最长的指定瑕疵度的元音子串
题目定义与要求最长的指定瑕疵度的元音子串问题是一个典型的。这个问题要求在给定的字符串中找到瑕疵度符合特定要求的最长元音子串,并返回其长度。具体来说,瑕疵度是指一个元音字符串中非元音字符的数量。瑕疵度的定义:在这个问题中,瑕疵度指的是元音字符串中非元音字符的数量。元音字符串的定义:开头和结尾都是元音字母(aeiouAEIOU)的字符串被定义为元音字符串。子串的定义:子串是指字符串中任意个连续字符组成的子序列。下面将从多个角度详细解析该问题:解题方法核心思想与逻辑算法实现细节。原创 2024-07-16 17:17:38 · 327 阅读 · 0 评论 -
构成指定长度字符串的个数
如果字符已经被使用或者与current的最后一个字符相同则跳过。原创 2024-07-16 17:17:19 · 176 阅读 · 0 评论 -
游戏分组(DFS)
DFS在解决特定类型的分组问题时,特别是需要遍历所有可能组合的情况,表现出了其独特的优势。将10名参赛者根据其游戏水平评分分为实力尽量相近的两队。原创 2024-07-16 17:16:37 · 151 阅读 · 0 评论 -
最多可以派出多少支球队
解决“最多可以派出多少支球队”的问题需要准确理解题目要求,选择合适的算法(如贪心算法和双指针技术),并注意对原始数据进行适当的预处理(如排序)。在编程实现过程中,有效的输入输出处理、合理的数据结构和算法选择都是关键因素。原创 2024-07-16 17:14:07 · 161 阅读 · 0 评论 -
S是不是L的有效子串
题目描述S长度 < 100, L长度 < 500000,判断S是不是L的有效子串。原创 2024-07-16 17:13:03 · 138 阅读 · 0 评论 -
狒狒吃香蕉(二分查找)
如果超过H小时,则必须加快速度。因此,我们需要找到这样一个临界速度K,它既是狒狒能够在H小时内吃完香蕉的最小速度,又确保狒狒能够慢慢享用。在实现二分查找的过程中,需要注意的是,当计算在某个速度下狒狒吃完香蕉所需的时间时,如果某一堆香蕉的数量小于这个速度,狒狒将在那个小时内吃掉这整堆香蕉,并且不会再吃更多的香蕉,下一个小时内才会开始吃另一堆。综上所述,通过二分查找算法,我们可以高效地解决“狒狒吃香蕉”的问题,找到一个既符合时间限制又尽可能慢的速度K,让狒狒能够在享受美食的同时,不至于被警卫发现。原创 2024-06-13 13:50:16 · 151 阅读 · 0 评论 -
LRU缓存
双向链表+哈希表原创 2022-09-06 12:51:00 · 140 阅读 · 1 评论 -
最大子序和
思路: 将问题转化为:子数组【0, i】的最大和连续子数组。dp数组存放nums[i]之前的最大和,dp[i+1] = Math.max(dp[i-1]+nums[i], nums[[i])时间复杂度: O(n)分治法思路: 参考力扣官网总结原创 2022-08-14 16:21:02 · 180 阅读 · 0 评论 -
直线上最多的点数
149. 直线上最多的点数题目: 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。解法1:暴力求解思路: 利用基准点和斜率(y1-y1/x1-x2),两层循环,每次将与基准点构成的不同斜率存在hash中,相同则计数,一趟下来求max。注意点:需要区别y1-y2 === 0 和 x1-x2 === 0 的情况。时间复杂度: O(n^2)空间复杂度:O(n)var maxPoints = funct原创 2022-05-31 19:04:51 · 274 阅读 · 1 评论 -
单词拆分(用字典元素拼出字符串)
139. 单词拆分动态规划dp[i]代表的是能够实现str【0,i】的boolean值。判断的是j(从【0,i】【j,i】的子字符串是否在字典中,且对应的dp[j]存在。即【0,j】子字符串可以实现,且【j,i】存在在字典中,那么当前dp[i]也可以实现,值为true。var wordBreak = function(s, wordDict) { const dp = Array(s.length+1).fill(false); dp[0] = true; const原创 2022-05-22 16:14:24 · 220 阅读 · 0 评论 -
括号生成方案
22. 括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。暴力解法(回溯+dfs)每个位置有两种可能左括号或者右括号,需要额外判断括号的有效性时间复杂度: O(2^2n * n)空间复杂度: O(n)可以优化不需要判断有效性。var generateParenthesis = function(n) { let path = [], result = [], arr = ['(', ')']; let isvalidlog原创 2022-05-20 18:04:05 · 268 阅读 · 0 评论 -
滑动窗口方案
滑动窗口方案滑动窗口中用到了左右两个指针,它们移动的思路是:以右指针作为驱动,拖着左指针向前走。右指针每次只移动一步,而左指针在内部 while 循环中每次可能移动多步。右指针是主动前移,探索未知的新区域;左指针是被迫移动,负责寻找满足题意的区间。在最少交换次数中 主要利用的就是滑动窗口的方案解题, 本篇文章主要介绍其他的一些利用滑动窗口的思想的题目。统计整数由连续自然数相加的数量统计一个整数可以由连续的自然数之和来表示给定一个整数, 计算该整数有几种连续自然数之和的表达式,并打印出每一种表原创 2022-04-24 21:12:09 · 181 阅读 · 0 评论 -
报文解压缩
报文解压缩思路: 通过用例发现需要考虑嵌套和不嵌套的情况;通过正则匹配字符串中‘3[k]’这中形式的字符串;判断匹配是否有结果;匹配有结果则取遍历匹配结果arr;每一个子项通过获取到重复次数和重复的字符子串,计算重复的字符串结果并替换到str中;重复1——4部,最后返回str// 解压密码// 3[k]2[mn]--kkkmnmn 3[m2[c]]--mccmccmccvar jieya = function (str) { let arr = str.match(/原创 2022-04-13 15:03:47 · 1353 阅读 · 0 评论 -
图(连通网络的操作次数etc)
1319. 连通网络的操作次数用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回原创 2022-04-18 11:38:51 · 118 阅读 · 0 评论 -
最少交换次数--(滑动窗口方案)
题目要求:给出一个数组nums,你需要通过交换位置,将数组中 任何位置 上的 小于 k 的整数 组合到一起,并返回所有可能中所需最少的交换次数。输出将数组A中小于k的整数组合到一起的最小交换次数。组合在一起是指满足条件的数字相邻,不要求在数组中的位置相邻。主要想法:滑动窗口的思想根据终点状态(交换后,1 都连在一起),逆推检查过程,所有 1 连在一起就意味着「原数组中 k 个 1」刚好可以让数组中长度为 k 的子数组的和为 k(使用前缀和可快速得到所有长度为 k 的区域中的数值之和原创 2022-04-06 21:27:19 · 3993 阅读 · 1 评论 -
动态规划实例
引入——fibonaci// fibonaci// 记录状态的递归,减少重复计算function fibonaci(n) { let array = new Array(n).fill(0); function digui(n) { if (n == 1 || n == 2) { return 1; } else if (array[n]) { return array[n]; } els原创 2021-11-09 17:05:18 · 391 阅读 · 0 评论 -
数据全排列组合
组合总和组合总和 II全排列全排列 II子集子集 II这类题目都是同一类型的,用回溯算法!其实回溯算法关键在于:不合适就退回上一步然后通过约束条件, 减少时间复杂度.大家可以从下面的解法找出一点感觉!...原创 2021-11-29 10:59:07 · 270 阅读 · 0 评论