06 2021 档案
2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件
摘要:2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件的一个子串的起始位置,未找到返回-1。 福大大 答案2021-06-30: map+all+滑动窗口
阅读全文
摘要:2021-06-29:在两个都有序的数组中找整体第K小的数。 福大大 答案2021-06-29: 1.A和B长度不等的时候,需要把A和B的长度变成相等。 A是短数组,B是长数组。 第k小的数,k从1开始。 k<=短,都取前k个数,变成等长。 短<k<=长,长取中,长扣1。 长<k<=和,两个数组都取
阅读全文
2021-06-28:最接近目标值的子序列和。给你一个整数数组 nums 和一个目标值 goal 。你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal 。也就是说,如果子序列元素和
摘要:2021-06-28:最接近目标值的子序列和。给你一个整数数组 nums 和一个目标值 goal 。你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal 。也就是说,如果子序列元素和为 sum ,你需要 最小化绝对差 abs(sum - goal) 。返回 abs(sum - go
阅读全文
2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽
摘要:2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽量少。返回最少的船数。 福大大 答案2021-06-27: 数组是[1 3 5 5 5 7 9 2
阅读全文
摘要:2021-06-26:给定一个只有0和1组成的二维数组,返回边框全是1的最大正方形面积。 福大大 答案2021-06-26: 1.自然智慧。遍历每个点,复杂度是O(N2)。每个点往右下看的从1到n正方形,复杂度是O(N),每个正方形,判断边框是否为1,复杂度是O(N)。所以总体时间复杂度是O(N4)
阅读全文
2021-06-25:只由小写字母(a~z)组成的一批字符串,都放在字符类型的数组String[] arr中,如果其中某两个字符串所含有的字符种类完全一样,就将两个字符串算作一类,比如:baacbba
摘要:2021-06-25:只由小写字母(a~z)组成的一批字符串,都放在字符类型的数组String[] arr中,如果其中某两个字符串所含有的字符种类完全一样,就将两个字符串算作一类,比如:baacbba和bac就算作一类。返回arr中有多少类? 福大大 答案2021-06-25: 用位操作。小写字母一
阅读全文
摘要:2021-06-24:求一个字符串中,最长无重复字符子串长度。 福大大 答案2021-06-24: 方法一:滑动窗口。自然智慧。 不重复的时候,右指针右移;重复的时候,左指针右移。 方法二:求出最右不重复位置。 map:key是值,value是数组序号,初始值value都是-1。 时间复杂度:O(N
阅读全文
摘要:2021-06-23:给定一个数组arr,代表每个人的能力值。再给定一个非负数k,如果两个人能力差值正好为k,那么可以凑在一起比赛。一局比赛只有两个人,返回最多可以同时有多少场比赛。 福大大 答案2021-06-23: 时间紧,思路见代码。 代码用golang编写。代码如下: package mai
阅读全文
2021-06-22:现有司机N*2人,调度中心会将所有司机平分给A、B两个区域,第 i 个司机去A可得收入为income[i][0],第 i 个司机去B可得收入为income[i][1],返回所有调
摘要:2021-06-22:现有司机N*2人,调度中心会将所有司机平分给A、B两个区域,第 i 个司机去A可得收入为income[i][0],第 i 个司机去B可得收入为income[i][1],返回所有调度方案中能使所有司机总收入最高的方案,是多少钱? 福大大 答案2021-06-22: 自然智慧。递归
阅读全文
2021-06-21:贩卖机只支持硬币支付,且收退都只支持10 ,50,100三种面额。一次购买只能出一瓶可乐,且投钱和找零都遵循优先使用大钱的原则,需要购买的可乐数量是m, 其中手头拥有的10、50
摘要:2021-06-21:贩卖机只支持硬币支付,且收退都只支持10 ,50,100三种面额。一次购买只能出一瓶可乐,且投钱和找零都遵循优先使用大钱的原则,需要购买的可乐数量是m, 其中手头拥有的10、50、100的数量分别为a、b、c,可乐的价格是x(x是10的倍数) 。请计算出需要投入硬币次数? 福大
阅读全文
2021-06-20:已知一个消息流会不断地吐出整数 1~N,但不一定按照顺序依次吐出。如果上次打印的序号为i, 那么当i+1出现时,请打印 i+1 及其之后接收过的并且连续的所有数,直到1~N全部接
摘要:2021-06-20:已知一个消息流会不断地吐出整数 1~N,但不一定按照顺序依次吐出。如果上次打印的序号为i, 那么当i+1出现时,请打印 i+1 及其之后接收过的并且连续的所有数,直到1~N全部接收并打印完。请设计这种接收并打印的结构。 福大大 答案2021-06-20: 头map,尾map,单
阅读全文
2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc“,s2=“123“,s3=“12ab3c“,应该返回true,因为s3去掉12
摘要:2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc”,s2=“123”,s3=“12ab3c”,应该返回true,因为s3去掉123后,剩下的是abc。比如s1=“abc”,s2=“123”,s3=“12ba3c”,应该返回fal
阅读全文
2021-06-18:已知数组arr,生成一个数组out,out的每个元素必须大于等于1,当arr[cur]>arr[cur-1]时,out[cur]>out[cur-1];当arr[cur]>arr
摘要:2021-06-18:已知数组arr,生成一个数组out,out的每个元素必须大于等于1,当arr[cur]>arr[cur-1]时,out[cur]>out[cur-1];当arr[cur]>arr[cur+1]时,out[cur]>out[cur+1]。求最小out的元素之和。比如[2,3,5,
阅读全文
摘要:2021-06-17:生成长度为size的达标数组,什么叫达标?达标:对于任意的 i<k<j,满足 [i] + [j] != [k] * 2。给定一个正数size,返回长度为size的达标数组。 福大大 答案2921-06-17: 递归缩容。 [a,b,c]→[2a-1,2b-1,2c-1,2a,2
阅读全文
摘要:2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。 福大大 答案2021-06-16: 方法一:自然智慧。递归。 方法二:动态规划。 思路: 定义dp[i] : 表示arr[0…i]范围上,在不能取相邻数的情况下,返回所有组合中的最大累加和 在arr[0…i]范围
阅读全文
摘要:2021-06-15:返回一个二维数组中,子矩阵最大累加和。 福大大 答案2021-06-15: 根据昨天的每日一题计算出0 ~ 0行,0 ~ 1行,0 ~ 2行,……0~N行的子数组最大累加和。 根据昨天的每日一题计算出1 ~ 1行,1 ~ 2行,1 ~ 3行,……1~N行的子数组最大累加和。 根
阅读全文
摘要:2021-06-14:返回一个数组中,子数组最大累加和。 福大大 答案2021-06-14: 动态规划。这道题过于经典,就不说具体过程了。时间复杂度:O(N)。空间复杂度:O(1)。 代码用golang编写。代码如下: package main import "fmt" func main() {
阅读全文
摘要:2021-06-13:如果一个节点X,它左树结构和右树结构完全一样,那么我们说以X为头的树是相等树。给定一棵二叉树的头节点head,返回head整棵树上有多少棵相等子树。 福大大 答案2021-06-14: 方法一:自然智慧。 递归函数:头num=左num+右num+0或1。 相等判断函数:左结构=
阅读全文
摘要:2021-06-12:已知一棵搜索二叉树上没有重复值的节点,现在有一个数组arr,是这棵搜索二叉树先序遍历的结果。请根据arr生成整棵树并返回头节点。 福大大 答案2021-06-12: 先序遍历+中序遍历(搜索树)+不重复值=唯一的二叉树。 解法一 自然智慧。第0位置为根节点,遍历1~N-1位置,
阅读全文
摘要:2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串? 比如 s1 = “abcde”,s2 = “axbc”。 福大大 答案2021-06-11: 解法一 求出str2所有的子序列,然后按照长度排序,长度大的排在前面。 然后考察哪个子序列字符串和s1的某个子串相
阅读全文
摘要:2021-06-10:一个字符串用最少刀数切出来的子串都是回文串,返回所有划分结果 。 福大大 答案2021-06-10: 此题是前天的每日一题的变种。时间紧,有不对的地方,请指正。 对字符串范围做是否是回文串的dp。dp[i][j]=true是[i,j]范围上是回文串,dp[i][j]依赖左下方。
阅读全文
摘要:2021-06-09:一个字符串用最少刀数切出来的子串都是回文串,返回其中一种划分结果 。 福大大 答案2021-06-09: 此题是昨天的每日一题的变种。 对字符串范围做是否是回文串的dp。dp[i][j]=true是[i,j]范围上是回文串,dp[i][j]依赖左下方。消耗O(N2)的空间。 再
阅读全文
摘要:2021-06-08:一个字符串至少要切几刀能让切出来的子串都是回文串? 福大大 答案2021-06-08: 方法一、自然智慧,从左往右,尝试切。回文判断是O(N2)。 时间复杂度是O(N3),空间复杂度是O(N)。 方法二、对字符串范围做是否是回文串的dp。dp[i][j]=true是[i,j]范
阅读全文
摘要:2021-06-07:一个字符串添加最少的字符变成回文串,回文串有多个,请返回所有结果。 福大大 答案2021-06-07: 动态规划回溯。按照前天的每日一题求出二维数组dp,然后根据dp回溯。 从dp右上角出发,看dp的左边,下边,左下边。如果dp和左边差值是1,朝左走;如果dp和下边差值是1,朝
阅读全文
摘要:2021-06-06:一个字符串添加最少的字符变成回文串,请返回其中一个结果。 福大大 答案2021-06-06: 动态规划回溯。按照昨天的每日一题求出二维数组dp,然后根据dp回溯。 从dp右上角出发,看dp的左边,下边,左下边。如果dp和左边差值是1,朝左走;如果dp和下边差值是1,朝下走;剩余
阅读全文
摘要:2021-06-05:一个字符串至少需要添加多少个字符能整体变成回文串? 福大大 答案2021-06-05: 动态规划。 s[i]和s[j]不等时:dp[i][j]=min(左边,下边)+1。 s[i]和s[j]相等时:dp[i][j]=左下边。 代码用golang编写。代码如下: package
阅读全文
摘要:2021-06-04:给定三个参数:二叉树的头节点head,树上某个节点target,正数K,从target开始,可以向上走或者向下走。返回与target的距离是K的所有节点。 福大大 答案2021-06-04: 记录父节点的map,key是当前节点,value是父节点。 访问集合,凡是节点被访问过
阅读全文
2021-06-03:布尔运算。给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。
摘要:2021-06-03:布尔运算。给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。 福大大 答案2021-06-
阅读全文
摘要:2021-06-02:给定一棵搜索二叉树头节点,转化成首尾相接的有序双向链表。 福大大 答案2021-06-02: 二叉树递归。左子树串完,右子树串完,最终串自己。 代码用golang编写。代码如下: package main import "fmt" func main() { head := &
阅读全文
2021-06-01:K个逆序对数组。给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第i个和第 j个元素,如果满
摘要:2021-06-01:K个逆序对数组。给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。由于答案可能很大,只需要返回 答案
阅读全文