04 2021 档案
2021-04-30:一条直线上有居民点,邮局只能建在居民点上。给定一个有序正数数组arr,每个值表示 居民点的一维坐标,再给定一个正数 num,表示邮局数量。选择num个居民点建立num个 邮局,使
摘要:2021-04-30:一条直线上有居民点,邮局只能建在居民点上。给定一个有序正数数组arr,每个值表示 居民点的一维坐标,再给定一个正数 num,表示邮局数量。选择num个居民点建立num个 邮局,使所有的居民点到最近邮局的总距离最短,返回最短的总距离。【举例】arr=[1,2,3,4,5,1000
阅读全文
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得分数的规则如下: 1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆
摘要:2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得分数的规则如下: 1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假
阅读全文
2021-04-28:力扣546,移除盒子。给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜
摘要:2021-04-28:力扣546,移除盒子。给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k * k 个积分。当你将所有盒子都去掉
阅读全文
2021-04-27:如果一个字符相邻的位置没有相同字符,那么这个位置的字符出现不能被消掉。比如:“ab“,其中a和b都不能被消掉 。如果一个字符相邻的位置有相同字符,就可以一起消掉。比如:“abbb
摘要:2021-04-27:如果一个字符相邻的位置没有相同字符,那么这个位置的字符出现不能被消掉。比如:“ab”,其中a和b都不能被消掉 。如果一个字符相邻的位置有相同字符,就可以一起消掉。比如:“abbbc”,中间一串的b是可以被消掉的, 消除之后剩下“ac”。某些字符如果消掉了,剩下的字符认为重新靠在
阅读全文
2021-04-26:整型数组arr长度为n(3 <= n <= 10^4),最初每个数字是<=200的正数且满足如下条件: 1. arr[0] <= arr[1]。2.arr[n-1] <= arr
摘要:2021-04-26:整型数组arr长度为n(3 <= n <= 10^4),最初每个数字是<=200的正数且满足如下条件: 1. arr[0] <= arr[1]。2.arr[n-1] <= arr[n-2]。3. arr[i] <= max(arr[i-1], arr[i+1])。但是在arr有
阅读全文
摘要:福大大 答案2021-04-25: 前缀和+左大右小的双端队列。时间太晚了,所以写得简单。 代码用golang编写。代码如下: package main import ( "container/list" "fmt" ) func main() { arr := []int{1, 2, -3, 4,
阅读全文
摘要:福大大 答案2021-04-24: 1)在图中找到所有入度为0的点输出。 2)把所有入度为0的点在图中删掉,继续找入度为0的点输出,周而复始。 3)图的所有点都被删除后,依次输出的顺序就是拓扑排序。 要求:有向图且其中没有环。 应用:事件安排、编译顺序。 代码用golang编写。代码如下: pack
阅读全文
2021-04-23:TSP问题 有N个城市,任何两个城市之间的都有距离,任何一座城市到自己的距离都为0。所有点到点的距 离都存在一个N*N的二维数组matrix里,也就是整张图由邻接矩阵表示。现要求
摘要:2021-04-23:TSP问题 有N个城市,任何两个城市之间的都有距离,任何一座城市到自己的距离都为0。所有点到点的距 离都存在一个N*N的二维数组matrix里,也就是整张图由邻接矩阵表示。现要求一旅行商从k城市 出发必须经过每一个城市且只在一个城市逗留一次,最后回到出发的k城,返回总距离最短的
阅读全文
2021-04-22:给定很多线段,每个线段都有两个数[start, end],表示线段开始位置和结束位置,左右都是闭区间,规定:1)线段的开始和结束位置一定都是整数值,2)线段重合区域的长度必须>=
摘要:2021-04-22:给定很多线段,每个线段都有两个数[start, end],表示线段开始位置和结束位置,左右都是闭区间,规定:1)线段的开始和结束位置一定都是整数值,2)线段重合区域的长度必须>=1。返回线段最多重合区域中,包含了几条线段 。 福大大 答案2021-04-22: 小根堆。 1.按
阅读全文
摘要:2021-04-21:手写代码:Dijkstra算法。 福大大 答案2021-04-21: Dijkstra算法是一种基于贪心策略的算法。每次新扩展一个路程最短的点,更新与其相邻的点的路程。时间紧,未完成。 代码用golang编写。代码如下: package main import ( "fmt"
阅读全文
摘要:2021-04-20:手写代码:最小生成树算法之Prim。 福大大 答案2021-04-20: 解锁点,解锁边,解锁点,解锁边,一直解锁下去。 代码用golang编写。代码如下: package main import ( "fmt" "math" ) func main() { graph :=
阅读全文
摘要:2021-04-19:手写代码:最小生成树算法之Kruskal。 福大大 答案2021-04-19: 并查集。边从小到大,找最小边,无环。 代码用golang编写。代码如下: package main import ( "fmt" "sort" ) func main() { graph := &G
阅读全文
摘要:2021-04-18:给定一个二维数组matrix,里面的值不是1就是0,上、下、左、右相邻的1认为是一片岛,返回matrix中岛的数量。 福大大 答案2021-04-18: 并查集。 代码用golang编写。代码如下: package main import "fmt" func main() {
阅读全文
摘要:2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再 给定 一个整数 num,表示画匠的数量,每个画匠只能画连在一起的画作。所有的画家 并行工作,请 返回完成所有的画作需要的最少时间。【举例】arr=[3,1,4],num=2。最好的分配方式为第一个
阅读全文
2021-04-16:摆放着n堆石子。现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。求出将n堆石子合并成一堆的最小得分(或最大得分)合
摘要:2021-04-16:摆放着n堆石子。现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。求出将n堆石子合并成一堆的最小得分(或最大得分)合并方案。 福大大 答案2021-04-16: 动态规划。 代码用golang编写。代码如下: pac
阅读全文
摘要:2021-04-15:给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中,字典序最小的结果。 福大大 答案2021-04-15: “b”和“ba”,直接比较两个字符串大小,得到的答案很容易出错。 比较“b”+“ba”和“ba”+“b”,得到的答案一定正确。 代码
阅读全文
摘要:2021-04-14:判断二叉树是否是满二叉树? 福大大 答案2021-04-14: 网上查到的答案,一般会计算树的高度。我的答案不需要计算树的高度,至于是否准确,不得而知。 1.左子节点满。 2.右子节点满。 3.左右子节点的数量相等。 采用递归即可。 代码用golang编写。代码如下: pack
阅读全文
摘要:2021-04-13:判断二叉树是否是平衡二叉树? 福大大 答案2021-04-13: 1.左子节点平衡。 2.右子节点平衡。 3.左右子节点高度差不超过1。 采用递归即可。 代码用golang编写。代码如下: package main import "fmt" func main() { head
阅读全文
摘要:2021-04-12:判断二叉树是否是搜索二叉树? 福大大 答案2021-04-12: 中序遍历有序即可。 1.递归。 2.莫里斯遍历。 代码用golang编写。代码如下: package main import "fmt" const INT_MAX = int(^uint(0) >> 1) co
阅读全文
摘要:2021-04-11:判断二叉树是否是完全二叉树? 福大大 答案2021-04-11: 按层遍历。 代码用golang编写。代码如下: package main import ( "container/list" "fmt" ) func main() { head := &TreeNode{Val
阅读全文
摘要:2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度 请达到O(1)。 福大大 答案2021-04-10
阅读全文
2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之
摘要:2021-04-10:给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的 第一个节点。如果不相交,返回null。【要求】如果两个链表长度之和为N,时间复杂度请达到O(N),额外空间复杂度 请达到O(1)。 福大大 答案2021-04-10
阅读全文
摘要:2021-04-09:rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null。给定一个由Node节点类型组成的无环单链表的头节点 head,请实现一个函数完成这个链表的复制,并返回复制的新链表的头节点。 【要求】时间复杂度O(N),额外空间复杂度O(1)
阅读全文
2021-04-09:rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null。给定一个由Node节点类型组成的无环单链表的头节点 head,请实现一个函数完
摘要:2021-04-09:rand指针是单链表节点结构中新增的指针,rand可能指向链表中的任意一个节点,也可能指向null。给定一个由Node节点类型组成的无环单链表的头节点 head,请实现一个函数完成这个链表的复制,并返回复制的新链表的头节点。 【要求】时间复杂度O(N),额外空间复杂度O(1)
阅读全文
摘要:2021-04-08:给定一个单链表的头节点head,请判断该链表是否为回文结构。 福大大 答案2021-04-08: 1.找中点。 2.按中点切分成两个链表。 3.反转右边链表。 4.相等判断。 5.反转右边链表。 6.左右链表合并。 7.返回true或者false。 代码用golang编写。代码
阅读全文
摘要:2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分,每一种方案都有,min{左部分累加和,右部分累加和},求这么多方案中,min{左部分累加和,右部分累加和}的最大值是多少? 整个过程要求时间复杂度O(N)。 福大大 答案2021-04-07: 自然
阅读全文
2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分,每一种方案都有,min{左部分累加和,右部分累加和},求这么多方案中,min{左部分累加和,右部分
摘要:2021-04-07:给定一个非负数组arr,长度为N,那么有N-1种方案可以把arr切成左右两部分,每一种方案都有,min{左部分累加和,右部分累加和},求这么多方案中,min{左部分累加和,右部分累加和}的最大值是多少? 整个过程要求时间复杂度O(N)。 福大大 答案2021-04-07: 自然
阅读全文
摘要:2021-04-06:假设有一个源源吐出不同球的机器,只有装下10个球的袋子,每一个吐出的球,要么放入袋子,要么永远扔掉。如何做到机器吐出每一个球之后,所有吐出的球都等概率被放进袋子里。 福大大 答案2021-04-06: i为球的序号。i从1开始,小于等于10的时候直接进袋子。i大于10的时候,1
阅读全文
摘要:2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。返回所有可能的结果中,代表最大数字的结果。 福大大 答案2021-04-05: 自然智慧想不到,需要练
阅读全文
2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。返
摘要:2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。返回所有可能的结果中,代表最大数字的结果。 福大大 答案2021-04-05: 自然智慧想不到,需要练
阅读全文
摘要:2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序列中累加和%m之后的最大值。 福大大 答案2021-04-04: 自然智慧即可。 1.递归,累加和。 2.动态规划,累加和。 3.动态规划,累加和%m。 4.双向动态规划,累加和%m。 代码用golang编写。代码如下
阅读全文
摘要:2021-04-03:给定两个字符串str1和str2,想把str2整体插入到str1中的某个位置,形成最大的字典序,返回字典序最大的结果。 福大大 答案2021-04-03: 1.暴力法。 2.DC3算法。自然智慧想不到,需要练敏感度。 2.1.构造字符串。str = str1+最小字符+str2
阅读全文
摘要:2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。 福大大 答案2021-04-02: 两个for循环嵌套。 外层循环。先遍历第一列,再遍历不包含列号为0的最后一行。
阅读全文
摘要:2021-04-01:给定一个正方形矩阵matrix,原地调整成顺时针90度转动的样子。[[a,b,c],[d,e,f],[g,h,i]]变成[[g,d,a],[h,e,b],[i,f,c]]。 福大大 答案2021-04-01: 四数交换。先外圈交换,再内圈交换。 代码用golang编写。代码如下
阅读全文