前端算法
文章平均质量分 62
算法记录常规的处理方式
Garbrielle
这个作者很懒,什么都没留下…
展开
-
狒狒吃香蕉(二分查找)
如果超过H小时,则必须加快速度。因此,我们需要找到这样一个临界速度K,它既是狒狒能够在H小时内吃完香蕉的最小速度,又确保狒狒能够慢慢享用。在实现二分查找的过程中,需要注意的是,当计算在某个速度下狒狒吃完香蕉所需的时间时,如果某一堆香蕉的数量小于这个速度,狒狒将在那个小时内吃掉这整堆香蕉,并且不会再吃更多的香蕉,下一个小时内才会开始吃另一堆。综上所述,通过二分查找算法,我们可以高效地解决“狒狒吃香蕉”的问题,找到一个既符合时间限制又尽可能慢的速度K,让狒狒能够在享受美食的同时,不至于被警卫发现。原创 2024-06-13 13:50:16 · 140 阅读 · 0 评论 -
LRU缓存
双向链表+哈希表原创 2022-09-06 12:51:00 · 137 阅读 · 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 · 175 阅读 · 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 · 257 阅读 · 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 · 205 阅读 · 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 · 259 阅读 · 0 评论 -
滑动窗口方案
滑动窗口方案滑动窗口中用到了左右两个指针,它们移动的思路是:以右指针作为驱动,拖着左指针向前走。右指针每次只移动一步,而左指针在内部 while 循环中每次可能移动多步。右指针是主动前移,探索未知的新区域;左指针是被迫移动,负责寻找满足题意的区间。在最少交换次数中 主要利用的就是滑动窗口的方案解题, 本篇文章主要介绍其他的一些利用滑动窗口的思想的题目。统计整数由连续自然数相加的数量统计一个整数可以由连续的自然数之和来表示给定一个整数, 计算该整数有几种连续自然数之和的表达式,并打印出每一种表原创 2022-04-24 21:12:09 · 172 阅读 · 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 · 1347 阅读 · 0 评论 -
图(连通网络的操作次数etc)
1319. 连通网络的操作次数用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回原创 2022-04-18 11:38:51 · 114 阅读 · 0 评论 -
最少交换次数--(滑动窗口方案)
题目要求:给出一个数组nums,你需要通过交换位置,将数组中 任何位置 上的 小于 k 的整数 组合到一起,并返回所有可能中所需最少的交换次数。输出将数组A中小于k的整数组合到一起的最小交换次数。组合在一起是指满足条件的数字相邻,不要求在数组中的位置相邻。主要想法:滑动窗口的思想根据终点状态(交换后,1 都连在一起),逆推检查过程,所有 1 连在一起就意味着「原数组中 k 个 1」刚好可以让数组中长度为 k 的子数组的和为 k(使用前缀和可快速得到所有长度为 k 的区域中的数值之和原创 2022-04-06 21:27:19 · 3985 阅读 · 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 · 383 阅读 · 0 评论 -
数据全排列组合
组合总和组合总和 II全排列全排列 II子集子集 II这类题目都是同一类型的,用回溯算法!其实回溯算法关键在于:不合适就退回上一步然后通过约束条件, 减少时间复杂度.大家可以从下面的解法找出一点感觉!...原创 2021-11-29 10:59:07 · 265 阅读 · 0 评论