随笔分类 -  算法

摘要:给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1 ,同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, weighti] 表示在 fromi 和 toi 节点之间有一条带权无向边。最小生成树 (MST) 是给定图中边的一个子集,它连接了所有节点且没有环 阅读全文
posted @ 2021-01-25 15:48 lippon 阅读(305) 评论(0) 推荐(0)
摘要:现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种就可以 阅读全文
posted @ 2021-01-09 20:40 lippon 阅读(278) 评论(0) 推荐(0)
摘要:给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入,保证 答案字符串的长度小于 104 。 leetcode 解题思路:这里 阅读全文
posted @ 2021-01-01 15:03 lippon 阅读(120) 评论(0) 推荐(0)
摘要:给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 leetcode 解题思路:利用单调栈的思想,新添加的从末尾添加,弹出比它大的栈顶元素,这样就能保证有序,且字典序最大。不同的是,必须保证原有字母还存在一个,所 阅读全文
posted @ 2020-12-20 21:16 lippon 阅读(1192) 评论(0) 推荐(0)
摘要:一维的区间合并计算问题种类很多,但是都是一个套路,起点排序,在这里做一个汇总。 合并无序区间 给出一个区间的集合,请合并所有重叠的区间。 leetcode 解题思路:先根据起点进行排序,再遍历数组,然后用一个指针获取当前区间: 如果遇到交集,就合并区间,将指针指向合并过的区间; 如果没有交集,那么就 阅读全文
posted @ 2020-12-19 14:50 lippon 阅读(259) 评论(0) 推荐(0)
摘要:求最少跳跃次数 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 leetcode DP 解题思路: 利用一个数组,表示到达每个位置最少跳跃次数。 遍历数组,然后对每个位置可以跳到的范围内的位 阅读全文
posted @ 2020-12-18 16:39 lippon 阅读(360) 评论(0) 推荐(0)
摘要:简介 石子游戏其实就是多人博弈,如何求最优结果。它存在很多变种,比如不同的取石方式,不同的计算输赢的方式,在这里做一个汇总。 1.只能从两端取,取的数量为得分 亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。 游戏以谁手中的石子最多来决出胜负。石子的总数 阅读全文
posted @ 2020-12-13 14:58 lippon 阅读(1061) 评论(0) 推荐(0)
摘要:统计所有小于非负整数 n 的质数的数量。 解题思路: 首先想到的是暴力枚举,但是会超时。采用埃氏筛选发,所谓素数,就是由质数的积够成的,所以,当得到一个质数,就可以标记后面所有由它的乘积而形成的素数。利用一个表标表示当前数是或否为素数。首先从低到高枚举所有数,然后如果是质数答案就加一,并标记于其关联 阅读全文
posted @ 2020-12-03 15:13 lippon 阅读(258) 评论(0) 推荐(0)
摘要:给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。 若可行,输出任意可行的结果。若不可行,返回空字符串。 leetcode 解题思路: 首先想想什么样的情况下不能构成可行的字符串,就像植树问题,最大的相同的字符个数一定小于字符串长度加一再除以二,如果超了就肯定会相邻。所以,我们在 阅读全文
posted @ 2020-11-30 15:49 lippon 阅读(900) 评论(0) 推荐(0)
摘要:给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 leetcode 解题思路: 首先想到的是暴力深搜,枚举每一种做 阅读全文
posted @ 2020-11-28 15:51 lippon 阅读(205) 评论(0) 推荐(0)
摘要:给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 leetcode 阅读全文
posted @ 2020-11-27 19:17 lippon 阅读(885) 评论(0) 推荐(0)
摘要:给定一个方阵,其中每个单元(像素)非黑即白。设计一个算法,找出 4 条边皆为黑色像素的最大子方阵。 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号,size 是子方阵的边长。若有多个满足条件的子方阵,返回 r 最小的,若 r 相同,返回 c 最小的子方阵。 阅读全文
posted @ 2020-11-27 16:50 lippon 阅读(238) 评论(0) 推荐(0)
摘要:给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。 leetcode 解题思路:如果进行排序,这里会超时。采用桶排序的思想,可以在线性时间解决。 首先建立桶,每个桶中只需要存放这个桶中元素的最大值和最小值。桶尺寸就是数组中元素范围再除以数组的大小 阅读全文
posted @ 2020-11-26 19:46 lippon 阅读(149) 评论(0) 推荐(0)
摘要:给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]为smalls[i]出现的所有位置。 leetcode 字典树 解题 阅读全文
posted @ 2020-11-25 16:51 lippon 阅读(302) 评论(0) 推荐(0)
摘要:你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。 你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。 每次移动,你可以取一 阅读全文
posted @ 2020-11-24 20:49 lippon 阅读(554) 评论(0) 推荐(0)
摘要:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 添加链接描述 解题思路: 再计算过程中,会产生负数和正数,需要同时保存最小的负数和最大的整数,因为乘起来的时候都有可能是产生更大的结果。利用两个变量,一个存储最大值,一个存储 阅读全文
posted @ 2020-11-24 16:13 lippon 阅读(246) 评论(0) 推荐(0)
摘要:给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 leetcode 解题思路: 如果是暴力做法,就只 阅读全文
posted @ 2020-11-24 14:00 lippon 阅读(556) 评论(0) 推荐(0)
摘要:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? leetcode 解题思路:利用动态规划的思想。从小到大遍历每个节点数量的情况。 首先是状态标识,利用里一个数组,标识不同节点数量下的情况。然后是状态转移,在从头遍历到结尾,枚举每一个中间节点为根时的组合数量,再累加就是当前节点数 阅读全文
posted @ 2020-11-23 17:10 lippon 阅读(116) 评论(0) 推荐(0)
摘要:前序遍历转换问题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 leetcode 迭代 解题思路:通过栈来中序遍历这个二叉搜索树。 遍历的时候,第一次遍历到底部的时候,那个节点就是头节点。每次遍历的时候都要存下当前节点为前节点 阅读全文
posted @ 2020-11-23 15:47 lippon 阅读(306) 评论(0) 推荐(0)
摘要:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 leetcode 解题思路: 首先想暴力该怎么做? 就是依次遍历数组,求以每一个柱子为高度的最大面积,当遍历到一个元素的时候,在去找到它的左右两边第一个比它小的柱 阅读全文
posted @ 2020-11-22 22:01 lippon 阅读(120) 评论(0) 推荐(0)