我要进厂-算法
文章平均质量分 69
进大厂的算法汇总
三少说
预则立,不预则废!
展开
-
LRU自定义最近最少使用-java实现
2.这个题很锻炼自己的owner能力(感觉挑战底层类,不屈于写业务代码)首先想到的是链表,这里使用最普通的 listNode的结构体。4.这个题很锻炼自己的边界能力(各种边界条件需要测试)1.这个题很锻炼自己的编码能力(代码量多,结构多)最近最少使用 翻译下:把最后一个不使用的给踢出去。3.这个题很锻炼自己的耐力(调试比较麻烦)翻译:使用了就放队列前头,想移除就移除队尾。为什么要写博客记录下呢?队尾永远是最近最少使用的。使用的放到队列的前头。原创 2023-10-12 22:59:10 · 339 阅读 · 0 评论 -
优惠券最佳叠加算法(图深度搜索)
可叠加的优惠券最佳组合算法(Java)一:前提知识背景:给出一组优惠券,并给出优惠券叠加关系,优惠券权重业务规则:某个类型的券存在最多限制需求:求出优惠券在业务规则下最优组合(权重最大的组合)名词规定:图的团=图的集=图的完全子图二:业务问题转为数学问题当存在一组优惠券时,得到最优优惠券组合。首先将业务数据抽离为算法数据可得到如下图其中 0-5编号代表优惠券编码,优惠券之间连线代表两者是可以共同使用的。从数据结构上考虑,可以得知:这是一个无向有环图,问题不难转化为:求出有向无环原创 2022-03-20 16:48:48 · 4845 阅读 · 4 评论 -
leetcode刷题记录
热题top10011. 盛最多水的容器原题地址给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最原创 2022-02-28 22:40:36 · 2081 阅读 · 0 评论 -
LeetCode5.最长回文子串(Java实现)
一:题目描述原题链接5. 最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成二:解题思路(官方解法)如果 s = a 那么最原创 2022-02-03 14:20:19 · 820 阅读 · 0 评论 -
LeetCode4.寻找两个正序数组的中位数(Java代码)
LeetCode4.寻找两个正序数组的中位数一:题目描述4. 寻找两个正序数组的中位数难度困难4868给定两个大小分别为 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]原创 2022-01-11 20:25:08 · 474 阅读 · 1 评论 -
我要进大厂-算法-第九天(暴力递归~动态规划)
阅读该文章预计90分钟文章目录动态规划一:初步认识动态规划1.1:介绍递归和动态规划二:求阶乘2.1:思路讲解2.2:Java代码三:汉诺塔问题3.1:题目介绍3.2:思路讲解3.3:Java代码四:打印一个字符串的所有子序列,包括空串4.1:思路解析4.2:Java代码(递归)五:打印一个字符串的全排列5.1:思路解析5.2:Java代码动态规划一:初步认识动态规划1.1:介绍递归和动态规划暴力递归:把问题转化为规模缩小了的同类问题的子问题有明确的不需要继续进行递归的条件(base cas原创 2021-08-22 23:06:42 · 218 阅读 · 0 评论 -
我要进大厂-算法-第八天(贪心~好难呀)
阅读该文章预计90分钟文章目录一:前缀树1.1:举个例子说明前缀树1.2:作用1.3: Java代码二:贪心2.1:前提知识一:前缀树1.1:举个例子说明前缀树举个例子:"abc" 加到头节点如果头节点没有走向a的路,就创建一个a,依次建立a、b、c“bce" 加到头节点如果头节点没有走向b的路,就创建b,如果没有b-c的路,依次加入c、e”abd“ 加入到头节点头节点有走向a的路,那么来到a,有a-》b,来到b,没有b-d,则b的下面创建一个d总的来说,依次看看有没有头节点到原创 2021-08-20 22:14:21 · 233 阅读 · 0 评论 -
我要进大厂-算法-第七天(Hash所有问题)
阅读该文章预计20分钟文章目录一:设计RandomPool结构1.1:题目描述1.2:思路讲解1.3:Java代码二:岛屿问题2.1:问题描述2.2: 思路讲解2.3:Java代码一:设计RandomPool结构1.1:题目描述【题目】 设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom():等概率随机返回结构中的任何一个key。【要求】 Insert、del原创 2021-08-19 19:15:29 · 170 阅读 · 0 评论 -
我要进大厂-算法-第六天(二叉树所有问题,拿来吧你)
阅读该文章预计60分钟文章目录一:二叉树的遍历1.1:题目描述1.2:思路分析1.3:Java代码二:找到二叉树的后继节点2.1:题目描述2.2:思路讲解2.3:Java代码三:二叉树的序列化和反序列化3.1:题目介绍3.2:思路讲解3.3:Java代码四:判断是否是平衡二叉树4.1:思路讲解4.2:Java代码五:是否是搜索二叉树5.1:思路讲解5.2:Java代码六:是否是完全二叉树6.1:思路讲解6.2:Java代码七:完全二叉树的节点个数7.1:思路讲解7.2:Java代码一:二叉树的遍历1.原创 2021-08-19 12:14:07 · 168 阅读 · 0 评论 -
我要进大厂-算法-第五天(链表热点题)
阅读该文章预计30分钟文章目录一:复制含有随机指针节点的链表1.1:题目描述1.2:思路分析1.2.1:空间复杂度O(N)1.2.2:空间复杂度O(1)1.3:Java代码二:两个单链表相交的节点2.1:题目描述2.2:题目分析2.3:Java代码一:复制含有随机指针节点的链表1.1:题目描述【题目】 一种特殊的链表节点类描述如下: public static class Node { private int value; private Node next;原创 2021-08-11 20:32:54 · 102 阅读 · 0 评论 -
我要进大厂-算法-第四天(拿下链表)
阅读该文章需要60分钟文章目录一:旋转正方形矩阵1.1:题目描述1.2:详细思路1.3:Java代码二:反转单向链表、反转双向链表2.1:题目描述2.2:思路讲解2.3:Java代码三: 之字形打印矩阵3.1:题目描述3.2:思路讲解3.3:Java代码四:行和列都排好序,找数4.1:题目描述4.2:思路讲解4.3:Java代码五:打印两个有序链表的公共部分5.1:题目描述5.2:思路讲解5.3:Java代码六:判断链表是否为回文结构6.1:题目描述6.2:思路如下6.3:Java代码七:放到最后一:旋原创 2021-08-04 11:16:28 · 170 阅读 · 0 评论 -
我要进大厂-算法-第三天(栈和队列拿下)
一:数组实现栈、队列前提知识:栈先进后出,队列先进先出。1.1:数组实现栈1.1.1:题目描述:用数组结构实现大小固定的队列和栈1.1.2:思路如下:用数组存进来的数用一个变量指明最后一个数的位置(尾标志)push操作放入存的数据,尾标志向后移动一位pop操作取出最后一位的数据,尾标志向前移动一位1.1.3:Java代码package xyz.fudongyang.basic.class_03.my;public class Code_01_Array_To_Stack_Que原创 2021-07-28 15:30:45 · 147 阅读 · 0 评论 -
我要进大厂-算法-第二天(热频高级排序)
阅读该文章需要花费15分钟(网-师承左程云)一.荷兰国旗问题1.1 题目描述:给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)1.2 思路先分析下,分析过程如下空间复杂度为1,则只能使用临时变量,不能开辟内存空间了,也就是不能申请辅助数组了。时间复杂度on,也就是只能遍历一遍数组。emmmm让我们学习下这个思路既然不能分配辅助数组,那我们的原数组要分为三原创 2021-07-15 16:19:14 · 229 阅读 · 0 评论 -
我要进大厂-算法-第一天(排序算法全家桶)
我要进大厂-算法-第一天阅读该文章需要花费15分钟(网-师承左程云)一:认识基本概念1.1 时间复杂度常数时间的操作:一个操作如果和数据量没有关系,每次都是 固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的指标。常用O (读作big O)来表示。具体来说,在常数操作数量的表达式中, 只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分 如果记为f(N),那么时间复杂度为O(f(N))。评价一个算法流程的好坏,先看时间复杂度的指标,然后再分 析不同数据样本下的实际原创 2021-06-28 22:52:35 · 265 阅读 · 1 评论