算法
文章平均质量分 62
孤竹彧
一个想进步,又控制不住自己的小码农
展开
-
设计跳表(动态设置节点高度)
1、跳表的设计,类似二分查找,但是不是二分查找,比较像之前遇到的一个面试题,使用有限个数鸡蛋,确定鸡蛋易损程度2、跳表无法再设计的时候,就达到完美状态,而是在操作过程中一直维护完美状态原创 2023-03-03 17:15:00 · 591 阅读 · 0 评论 -
leetcode331. 验证二叉树的前序序列化
序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 _9_ / \ 3 2 / \ / \ 4 1 # 6/ \ / \ / \# # # # # #例如,上面的二叉树可以被序列化为字符串 “9,3,4,#,#,1,#,#,2,#,6,#,#”,其中 # 代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写原创 2021-03-12 13:50:46 · 156 阅读 · 0 评论 -
leetcode1776. 车队 II
在一条单车道上有 n 辆车,它们朝着同样的方向行驶。给你一个长度为 n 的数组 cars ,其中 cars[i] = [positioni, speedi] ,它表示:positioni 是第 i 辆车和道路起点之间的距离(单位:米)。题目保证 positioni < positioni+1 。speedi 是第 i 辆车的初始速度(单位:米/秒)。简单起见,所有车子可以视为在数轴上移动的点。当两辆车占据同一个位置时,我们称它们相遇了。一旦两辆车相遇,它们会合并成一个车队,这个车队里的车有着同样原创 2021-03-02 13:19:49 · 439 阅读 · 0 评论 -
leetcode803. 打砖块
写个程序,判断我所有已解答的题目中的时间排名我们有一组包含1和0的网格;其中1表示砖块。 当且仅当一块砖直接连接到网格的顶部,或者它至少有一块相邻(4 个方向之一)砖块不会掉落时,它才不会落下。我们会依次消除一些砖块。每当我们消除 (i, j) 位置时, 对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这个消除而落下。返回一个数组表示每次消除操作对应落下的...原创 2020-01-13 14:43:30 · 330 阅读 · 0 评论 -
leetcode808. 分汤(论结合实用场景的重要性)
多考虑业务,多考虑其他没有说明的情况,对于编写代码的效率,是很有帮助的,这也是能力的一部分原创 2020-09-16 13:34:31 · 222 阅读 · 0 评论 -
leetcode164. 最大间距(利用桶排序)
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明:你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。答:这道题原创 2020-05-19 10:00:54 · 211 阅读 · 0 评论 -
leetcode460. LFU缓存
请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)...原创 2020-04-10 13:22:23 · 164 阅读 · 0 评论 -
第22场双周赛
应该有三个多月没有参加周赛,今天参加下双周赛,第一局傻了,居然把10的3次方看成300,导致两次错误,第二题没在意n特别大,第三题结束,暂时排名一百多,很慌,第四局想了一会,突然灵光一闪,代码实现,一次通过。先说下总结:1、很重要的提示,数组的数值范围很小,那就很简单了,先把arr2的数字放到数组里,然后再让arr1比比较2、如果只判断一排的座位,那是简单的,那就把所有的按排进行分类,一排一...原创 2020-03-21 23:58:50 · 194 阅读 · 1 评论 -
算法导论第19章-斐波那契堆的学习笔记(以及LeetCode1383的斐波那契堆的做法)
首先,斐波那契堆有什么优点?插入更快,给元素赋值更快(o(1));斐波那契堆是可合并堆,那就满足下列几个方法MAKE-HEAP(): o1INSERT(H,x): o1MINIMUN(H): o1EXTRACT-MIN(H): o(lgn)UNION(H1,H2): o1除此之外还有DECREASE-KEY(H,x,k): o1DELETE(H,x): o(lgn)我们依次说:...原创 2020-03-20 01:34:44 · 345 阅读 · 0 评论 -
PriorityQueue的源码阅读
什么是PriorityQueue,能保证内部的有序(不是全有序,而是每次都能取到最小值)去年第一次在算法题中使用到PriorityQueue,今天又遇到了,好奇它是如何实现的,今天来看一下源码。看源码的时候,开始是云里雾里的,直到见到这么一个方法heapify,数组建堆,立马就清楚了。先说一下heapify也就是PriorityQueue的核心,把一个数组看成一个二叉树。如图: ...原创 2020-03-19 00:24:45 · 127 阅读 · 0 评论 -
LeetCode1383. 最大的团队表现值(PriorityQueue的使用)
0 / \ 1 2 / \ / \ 3 4 5 6 / \7 8原创 2020-03-18 22:22:19 · 594 阅读 · 0 评论 -
leetcode刷面试题(面试题08合集)
面试题 08.01. 三步问题三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1:输入:n = 3输出:4说明: 有四种走法示例2:输入:n = 5输出:13提示:n范围在[1, 1000000]之间public int waysToStep(int...原创 2020-03-08 18:47:33 · 403 阅读 · 1 评论 -
leetcode面试题 17.26. 稀疏相似度
两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度。例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 个,并集的元素有 5 个。给定一系列的长篇文档,每个文档元素各不相同,并与一个 ID 相关联。它们的相似度非常“稀疏”,也就是说任选 2 个文档,相似度都很接近 0。请...原创 2020-03-05 13:39:39 · 232 阅读 · 0 评论 -
leetcode刷面试题(面试题05合集)
面试题 05.01. 插入插入。给定两个32位的整数N与M,以及表示比特位置的i与j。编写一种方法,将M插入N,使得M从N的第j位开始,到第i位结束。假定从j位到i位足以容纳M,也即若M = 10 011,那么j和i之间至少可容纳5个位。例如,不可能出现j = 3和i = 2的情况,因为第3位和第2位之间放不下M。示例1:输入:N = 10000000000, M = 10011, i = ...原创 2020-03-01 18:52:02 · 674 阅读 · 0 评论 -
leetcode刷面试题(面试题04合集)
面试题 04.01. 节点间通路节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2输出:true示例2:输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0,...原创 2020-03-01 00:13:54 · 268 阅读 · 0 评论 -
leetcode刷面试题(面试题03合集)
面试题 03.01. 三合一三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。示例1:输入:[“TripleInOne”, “pus...原创 2020-02-28 23:32:26 · 245 阅读 · 0 评论 -
算法面试题合集
题目都来着leetcode新的题都会在这更新1、程序员面试经典leetcode刷面试题(面试题01合集);leetcode刷面试题(面试题02合集);2、剑指offerleetcode面试题41. 数据流中的中位数;3、周赛leetcode14双周赛;LeetCode第12场双周赛;leetcode第149周赛;leetcode第7双周赛;第9场双周赛;leetcode第...原创 2020-02-28 11:41:20 · 148 阅读 · 0 评论 -
leetcode刷面试题(面试题02合集)
这一大块都是链表的练习。面试题 02.01. 移除重复节点编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解...原创 2020-02-28 10:20:31 · 306 阅读 · 0 评论 -
位运算在判断重复时候的运用
先说核心,怎么使用位运算来检查重复。一个int类型的数有32位,用二进制来表示就是00000000000000000000000000000000至11111111111111111111111111111111是不是很像一个32位的boolean类型的数组这时候给你一串字符串,全部由小写字母组成,现在问你字符串中保存了哪几个不重复的字母。去重嘛,第一反应是使用set,每个字母都保存...原创 2020-02-27 16:35:55 · 1150 阅读 · 0 评论 -
leetcode面试题41. 数据流中的中位数(同leetcode295. 数据流的中位数)
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据...原创 2020-02-25 17:26:25 · 161 阅读 · 0 评论 -
leetcode刷面试题(面试题01合集)
面试题 01.01. 判定字符是否唯一实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false示例 2:输入: s = “abc”输出: true限制:0 <= len(s) <= 100如果你不使用额外的数据结构,会很加分。//这种方式时间复杂度最高public boolean isUnique...原创 2020-02-25 11:43:13 · 474 阅读 · 0 评论 -
properties文件快速转为yml文件
只是做了简单的测试,没有考虑过文件里有注释的情况思想就是先把数据读到map中,然后再保存到新的文件中public class Test { public static void main(String[] args) throws Exception { String path = "C:\\Users\\12483\\Desktop\\test"; F...原创 2020-02-24 10:12:54 · 5080 阅读 · 1 评论 -
动态规划总结与示例
什么是动态规划:把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。意思很简单,就是不要想一下子找到结果,要你求第n位,你不要想立马求到,从第0位开始,依次求到。举个我认为最简单的最优规划的例子,斐波那契数列。0、1、1、2、3、5、8…斐波那契数列满足f(x)=f(x-1)+f(x-2)(x>=2);如果这时候要问你第n列的斐波那契数是多少,怎么计算,先算n-1和...原创 2020-01-15 16:29:22 · 201 阅读 · 0 评论 -
leetcode91. 解码方法(动态规划)
一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 ...原创 2020-01-13 14:42:55 · 249 阅读 · 0 评论 -
leetcode1310. 子数组异或查询
最近一直没参加周赛,今天遇到这道题,感觉有点意思,可以试着写下心路历程题目:有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li]...原创 2020-01-07 11:01:00 · 314 阅读 · 0 评论 -
leetcode338. 比特位计数
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]我的想法很简单,就是用一个数组保存值,然后每次+1时,进行计算,我想了下复杂度,也是o(n)级别的。public int[] countBits(int n...原创 2019-12-26 11:36:07 · 148 阅读 · 0 评论 -
使用java语言,2s内找到一亿内的质数
我是看了别人的博客,3s内使用python找到一亿内的质数,第一反应是挺厉害啊,一个一个判断肯定超时啊,那是有啥高招?然后准备学习学习,然而,python能力太渣,没看懂(主要是没耐心看)。那我能不能使用java试试呢,按照我的想法,试了试,2s内。代码:public class TestZhiNum { public static void main(String[] args) ...原创 2019-12-16 17:10:49 · 281 阅读 · 1 评论 -
leetcode382. 链表随机节点(蓄水池采样算法)
给定一个单链表,随机选择链表的一个节点,并返回相应的节点值。保证每个节点被选的概率一样。进阶:如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?示例:// 初始化一个单链表 [1,2,3].ListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new List...原创 2019-12-05 16:49:58 · 441 阅读 · 0 评论 -
leetcode14双周赛
十六进制魔术数字你有一个十进制数字,请按照此规则将它变成「十六进制魔术数字」:首先将它变成字母大写的十六进制字符串,然后将所有的数字 0 变成字母 O ,将数字 1 变成字母 I 。如果一个数字在转换后只包含 {“A”, “B”, “C”, “D”, “E”, “F”, “I”, “O”} ,那么我们就认为这个转换是有效的...原创 2019-12-02 11:24:19 · 160 阅读 · 0 评论 -
约瑟夫环问题
有N个人编号1、2、3…N,依次序绕圈而坐,然后从1号还是报数,从1开始,次遇到M的倍数,那个人就淘汰,并且不参与之后的报数,直至只剩一个人答:这道题的第一个思路就是链表啊,读到M的人,直接从链表删除,直至链表只剩下一个节点使用递归代码:private static int getAns(int n, int m) { ListNode start = new ListNode(...原创 2019-11-22 17:58:44 · 108 阅读 · 0 评论 -
显示有效的区间
public class TestXX {public List<Node> get(List<Node> list) { list.sort(new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { ret...原创 2019-11-06 10:14:31 · 218 阅读 · 0 评论 -
leetcode1036. 逃离大迷宫
在一个 10^6 x 10^6 的网格中,每个网格块的坐标为 (x, y),其中 0 <= x, y < 10^6。我们从源方格 source 开始出发,意图赶往目标方格 target。每次移动,我们都可以走到网格中在四个方向上相邻的方格,只要该方格不在给出的封锁列表 blocked 上。只有在可以通过一系列的移...原创 2019-11-04 17:40:59 · 533 阅读 · 2 评论 -
LeetCode第12场双周赛
1、力扣排行榜新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard。请你帮忙来设计这个 Leaderboard 类,使得它有如下 3 个函数:addScore(playerId, score):假如参赛者已经在排行榜上,就给他的当前得分增加 score 点分值并更新排行。假如该参赛者不在排行榜上,就把他添加到榜单上,并且将分数设置为...原创 2019-11-03 14:39:29 · 184 阅读 · 0 评论 -
leetcode1203. 项目管理
https://leetcode-cn.com/problems/sort-items-by-groups-respecting-dependencies/公司共有 n 个项目和 m 个小组,每个项目要不没有归属,要不就由其中的一个小组负责。我们用 group[i] 代表第 i 个项目所属的小组,如果这个项目目前无人接手,那么 group[i] 就等于 -1。(项目和小组都是从零开始编号的)...原创 2019-10-30 14:46:19 · 645 阅读 · 0 评论 -
leetcode1206. 设计跳表(跳表)
个人学习跳表网站:https://blog.csdn.net/pcwl1206/article/details/83512600跳表思想类似于二分查找,只不过用在链表上。但是又不能弄成平衡的二分查找(保持平衡耗费的性能很高),所以加入随机数,随机高度,保证效率不会太低。跳表的查询复杂度是O(lgn),仅插入或删除的复杂度是O(1),但是插入、删除之前需要先查询位置,所以还是O(lgn)图不会...原创 2019-10-29 11:19:28 · 731 阅读 · 0 评论 -
leetcode552. 学生出勤记录 II(典型的最优规划)
https://leetcode-cn.com/problems/student-attendance-record-ii/给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量。 答案可能非常大,你只需返回结果mod 109 + 7的值。学生出勤记录是只包含以下三个字符的字符串:‘A’ : Absent,缺勤‘L’ : Late,迟到‘P’ : Present,到场...原创 2019-10-28 11:11:56 · 306 阅读 · 0 评论 -
leetcode76. 最小覆盖子串
题目:https://leetcode-cn.com/problems/minimum-window-substring/给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样...原创 2019-10-17 11:07:20 · 146 阅读 · 0 评论 -
leetcode780. 到达终点
https://leetcode-cn.com/problems/reaching-points/comments/从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则返回 True ,否则返回 False。这道题一开始觉得是递归,但是立马被自己否决了,如果起始是(...原创 2019-08-22 20:24:59 · 288 阅读 · 0 评论 -
leetcode第150周赛
恭喜自己拿到第13名,再创新高的战绩然后我的最后一题有点取巧第一题public int countCharacters(String[] words, String chars) { int ans = 0; for (int i = 0; i < words.length; i++) { if (get(words[i], chars)) { ans += words[...原创 2019-08-18 13:00:44 · 371 阅读 · 0 评论 -
leetcode827. 最大人工岛
https://leetcode-cn.com/problems/making-a-large-island/submissions/在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地。进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)示例 1:输入: [[1, 0], [0, 1]]输出: 3解释: 将一格0...原创 2019-08-27 23:12:34 · 328 阅读 · 0 评论