2022-12-22:给定一个数字n,代表数组的长度,给定一个数字m,代表数组每个位置都可以在1~m之间选择数字,所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。返回达标数组的数量。...1 n 的时候没有取模的逻辑,因为非重点。来自微众银行。...// n : 一共的长度!// m : 每一位,都可以在1~m中随意选择数字// 返回值:i..... 有几个合法的数组!...{ ans += zuo(i + 1, f, s, cur, n, m); } } return ans;}// 正式方法// 需要看最长递增子序列!...// 尤其是理解ends数组的意义!fn number2(n: i32, m: i32) -> i32 { //repeat(vec!
给你一个二进制字符串 s 和一个整数 k 。 如果所有长度为 k 的二进制字符串都是 s 的子串,请返回 True ,否则请返回 False 。...示例 1: 输入:s = "00110110", k = 2 输出:true 解释:长度为 2 的二进制串包括 "00","01","10" 和 "11"。...它们分别是 s 中下标为 0,1,3,2 开始的长度为 2 的子串。...示例 2: 输入:s = "00110", k = 2 输出:true 示例 3: 输入:s = "0110", k = 1 输出:true 解释:长度为 1 的二进制串包括 "0" 和 "1"...示例 4: 输入:s = "0110", k = 2 输出:false 解释:长度为 2 的二进制串 "00" 没有出现在 s 中。
2025-03-06:给定一个长度为 n 的整数组 nums,其中 n 是偶数,同时还有一个整数 k。 你可以进行一些操作,每次可以把数组中的任何一个元素替换为 0 到 k 之间的任意整数。...用go语言,给定一个长度为 n 的整数组 nums,其中 n 是偶数,同时还有一个整数 k。 你可以进行一些操作,每次可以把数组中的任何一个元素替换为 0 到 k 之间的任意整数。...2 n == nums.length <= 100000。 n 是偶数。 0 的修改次数,使得数组满足条件。 6.时间复杂度为 O(n),空间复杂度为 O(n)。...综上所述,总的时间复杂度为 O(n),总的额外空间复杂度为 O(n)。这个解决方案通过操作数组元素的方法来满足题目要求,并找出最少需要修改的次数。
2023-11-22:用go语言,给你一个长度为 n 下标从 0 开始的整数数组 nums。 它包含 1 到 n 的所有数字,请你返回上升四元组的数目。...如果一个四元组 (i, j, k, l) 满足以下条件,我们称它是上升的: 0 n 且 nums[i] < nums[k] < nums[j] < nums[l]...大体过程如下: 算法1:countQuadruplets1 1.初始化变量:n为数组长度,ans为结果计数器,dp为动态规划数组。...算法2:countQuadruplets2 1.初始化变量:n为数组长度,ans为结果计数器,dp为动态规划数组。 2.遍历数组,从第二个元素开始(下标为1): a.初始化计数器cnt为0。...总的时间复杂度:两种算法的时间复杂度都是O(n^2),因为需要两层循环遍历数组。 总的额外空间复杂度:两种算法的空间复杂度都是O(n),因为需要使用一个长度为n的动态规划数组dp。
2024-09-07:用go语言,给定一个包含 n 个非空字符串的数组 arr,你的任务是找出一个长度为 n 的字符串数组 answer。...满足以下条件: 对于每个索引 i,answer[i] 是 arr[i] 的最短子字符串,并且这个子字符串不是 arr 中其他字符串的子字符串。 如果有多个这样的子字符串,则选择字典序最小的一个。...如果不存在这样的子字符串,则对应位置的 answer[i] 应为一个空字符串。 你需要编写一个算法来实现以上要求,并返回生成的字符串数组 answer。...解释:求解过程如下: 对于字符串 "cab" ,最短没有在其他字符串中出现过的子字符串是 "ca" 或者 "ab" ,我们选择字典序更小的子字符串,也就是 "ab" 。...对于字符串 "ad" ,不存在没有在其他字符串中出现过的子字符串。 对于字符串 "bad" ,最短没有在其他字符串中出现过的子字符串是 "ba" 。
已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是()。...首先明确,题目让我们求复杂度,这里显然不是讨论移动次数,因为不论什么情况,移动次数都是(M+N),不需要讨论 所以这里求的是合并过程中的比较次数 最好的情况,很容易想,就是长度较短的数列中最小的数还比另一个数列最大的数字大...,如(7 8 9和 1 2 3 4 ),这种情况需要比较min(m,n)次就好了,复杂度为O(min(m,n))。...但是注意,最后一次移动是一定不需要比较的,因为剩最后一个元素的时候,必然另一个数列已经结束了,所以不用比。...)咯 可是选项没有,哈哈,别急,比较次数是 (m+n-1) 次,m和n的次幂都是1,所以复杂度也是一次就行了,那么到底是O(n)还是O(m)呢,肯定选最大的那个啊,因为是最坏情况,故复杂度为O(Max(
给定一个长度为N的正数数组,还有一个正数K, 返回有多少子序列的最大公约数为K。 结果可能很大,对1000000007取模。...答案2023-08-22: 算法过程分步描述如下: 1.初始化数组 dp、cnt 和 pow2,长度为 MAXN,全部初始值为 0。 2.读取数组长度 N 和正数数组 arr。...初始化 counts 为 0,用于统计具有因子 i 的元素个数。 b. 遍历 cnt 数组,从 i 开始,以 i 为步长,累加 cnt[j] mod mod 到 counts。 c....从 2*i 开始,以 i 为步长,累减 dp[j] mod mod 到 dp[i]。 7.输出 dp[1],即表示具有最大公约数为 K 的子序列个数。...该算法的时间复杂度为 O(N * log(MAXN)),空间复杂度为 O(MAXN)。
2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。...每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。要使得word成为一个K周期字符串,需要进行最少的操作次数。...一个K周期字符串是指存在一个长度为k的字符串s,通过多次连接s可以得到word。比如,如果word == "ababab",那么当s = "ab"时,word是一个2周期字符串。...大体步骤如下: 1.初始化变量 n 为字符串 word 的长度,并设定变量 res 初始值为最大整数。 2.创建一个空的计数映射 count,用于存储不同子串的出现次数。...3.遍历字符串 word 中长度为 k 的子串,依次检查每个子串。 4.在循环中,统计每个长度为 k 的子串出现的次数,更新 res 为使得 word 成为 K 周期字符串所需的最少操作次数。
2023-07-02:给定一个1~N的排列,每次将相邻两数相加,可以得到新的序列,长度是N-1 再对新的序列,每次将相邻两数相加,可以得到新的序列,长度是N-2 这样下去可以最终只剩一个数字 比如 :...认为 1, 10, 2...的字典序更小 如果给定的n和sum,有答案,返回一个N长度的答案数组 如果给定的n和sum,无答案,返回一个1长度的数组{ -1 } 输入 : N = 4, sum = 16...2.定义一个变量status,其初始值为((1 n + 1)) - 1) ^ 1。 3.如果n小于1或大于10,或者sum大于sums[n],则返回数组[-1]。...5.如果ans的值为-1,说明无法找到合适的序列,返回数组[-1]。 6.创建一个长度为n的答案数组ans,并初始化index为0,rest为sum。...总的时间复杂度:O(2^N * sum),其中N为输入的n,sum为输入的sum。 总的空间复杂度:O(2^N * sum),包括二维动态数组dp的空间。
2023-03-02:给定一个数组arr,长度为n,任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的!求所有可能的合法子序列中,最大中位数是多少?...中位数的定义为上中位数,1, 2, 3, 4的上中位数是2,1, 2, 3, 4, 5的上中位数是3,2 n 是实习题,实际上有难度。方法一:要i还是不要i,递归或者动态规划。方法二:以结果为导向,二分法。时间复杂度:O(N*logN)。空间复杂度:O(N)。...1和-1,// 你可以从左往右选择数字组成子序列,// 但是要求任何两个相邻的数,至少要选1个// 请返回子序列的最大累加和// arr : 数组// i : 当前来到i位置// pre : 前一个数字...,至少选一个,来生成序列// 所有这样的序列中,// 到底有没有一个序列,其中>= median的数字,能达到一半以上fn max_sum1( arr: &mut Vec, help
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是多少?...中位数的定义为上中位数, [1, 2, 3, 4]的上中位数是2, [1, 2, 3, 4, 5]的上中位数是3, 2 n <= 10^5, 1 <= arr[i] <= 10^9。...答案2023-03-02: 这道题看起来是实习题,实际上有难度。 方法一:要i还是不要i,递归或者动态规划。 方法二:以结果为导向,二分法。 时间复杂度:O(N*logN)。 空间复杂度:O(N)。...前一个数字(i-1位置),当初选了没有 // 如果pre == 0, 表示i-1位置的数字,当初没有选 // 如果pre == 1, 表示i-1位置的数字,当初选了 // 返回arr[i...]的子序列...,至少选一个,来生成序列 // 所有这样的序列中, // 到底有没有一个序列,其中>= median的数字,能达到一半以上 fn max_sum1( arr: &mut Vec,
2022-08-06:给定一个数组arr,长度为N,arr中所有的值都在1~K范围上,你可以删除数字,目的是让arr的最长递增子序列长度小于K。返回至少删除几个数字能达到目的。...N N*K)。额外空间复杂度:O(N*K)。rust和typescript的代码都有。...// len长度了!len = 3 : 1 2 3// arr[index....]是能够决定的,之前的,已经不能再决定了// 返回:让最终保留的数字,凑不足k长度的情况下,至少要删几个!...// len长度了!len = 3 : 1 2 3// arr[index....]是能够决定的,之前的,已经不能再决定了// 返回:让最终保留的数字,凑不足k长度的情况下,至少要删几个!...(arr: number[], k: number): number { var n: number = arr.length; var dp: number[][] = new Array(n);
2023-05-22:给定一个长度为 n 的字符串 s ,其中 si 是:D 意味着减少;I 意味着增加。...有效排列 是对有 n + 1 个在 0, n 范围内的整数的一个排列 perm ,使得对所有的 i:如果 si == 'D',那么 permi > permi+1,以及;如果 si == 'I',那么...时间复杂度:O(n!),其中 n 为数字序列的长度。空间复杂度:O(n),递归过程中需要 O(n) 的栈空间。...2.初始化 dpn 为 1,表示在最后一个位置填入 less 的数量只有一种。3.从倒数第二个位置开始往前遍历,根据当前位置 si-1 的值,分别枚举下一个数字的大小。...具体来说,如果当前的 sum 大于 mod,则减去一个 mod;如果当前的 sum 小于 0,则加上一个 mod。6.最终答案为 dp0。时间复杂度:O(n),只需填充一个一维数组即可。
2022-05-21:给定一个数组arr,长度为n, 表示n个服务员,每个人服务一个人的时间。 给定一个正数m,表示有m个人等位。 如果你是刚来的人,请问你需要等多久?...假设:m远远大于n,比如n的9次方,该怎么做? 来自谷歌。 答案2022-05-21: 方法一:小根堆。时间复杂度:O(m*logN)。 方法二:二分法。...时间复杂度:O(N*logm)。 代码用rust编写。...("测试开始"); for _i in 0..test_time { let n: i32 = rand::thread_rng().gen_range(0, len) + 1;...[]; let n = arr.len() as i32; for i in 0..n { heap.push(vec!
2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1。...之后,Alice可以选择以下两种行动之一: 将一个0变为1(最多执行 maxChanges 次),或交换相邻的两个数(一个是1,一个是0)。 返回拾取 k 个1 所需的最少行动次数。...• 比较 k 和 f(i) 的大小,选择取的数为 k 还是 f(i)。 • 如果 k 小于等于 maxChanges,则继续遍历下一个数。...• 若右指针指向的数为 1,则将右侧计数、和增加。 7.接下来在一个 while 循环内调整左右指针位置,使得左右两侧数量之和不超过 k。...总的时间复杂度: • 整体是两个循环的嵌套,外部循环遍历数组中的每个元素,内部循环是双指针逻辑,所以时间复杂度是 O(n^2)。
2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。...:= rand.Intn(N) + 1 k := rand.Intn(K) + 1 arr := randomArray(n, V) st := NewSegmentTree(arr...:= len(arr) k := K max := make([][]int, (n+1)<<2) query := make([][]int, (n+1)<<2) for i := 0...= n ans.k = k ans.max = max ans.query = query for i := 0; i n; i++ { ans.update(i, arr[...right = this.query[rt<<1|1] } this.merge(this.query[rt], left, right) } } // // 暴力实现的结构
2023-06-20:给定一个长度为N的数组arr,arr[i]表示宝石的价值 你在某天遇到X价值的宝石, X价值如果是所有剩余宝石价值中的最小值,你会将该宝石送人 X价值如果不是所有剩余宝石价值中的最小值...时间复杂度和空间复杂度如下: 方法1(days1): • 时间复杂度:O(N^2),其中N是宝石数组的长度。需要遍历数组N次,并且在每次操作中需要移动宝石,移动的次数也达到了N次。...• 空间复杂度:O(N),需要额外的存储空间来存储宝石数组。 方法2(days2): • 时间复杂度:O(N * (logN)^2),其中N是宝石数组的长度。...构建IndexTree和SegmentTree所需的时间复杂度为O(N * logN)。每次查询最小值的时间复杂度为O(logN),总共进行N次查询。...综上所述,方法1的时间复杂度为O(N^2),方法2的时间复杂度为O(N * (logN)^2)。在时间复杂度上,方法2优于方法1。方法1的空间复杂度为O(N),方法2的空间复杂度为O(N)。
2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间l,r之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。...:= rand.Intn(N) + 1 k := rand.Intn(K) + 1 arr := randomArray(n, V) st := NewSegmentTree(arr, k)...:= len(arr) k := K max := make([][]int, (n+1)<<2) query := make([][]int, (n+1)<<2) for i := 0; i...= n ans.k = k ans.max = max ans.query = query for i := 0; i n; i++ { ans.update(i, arr[i]) }...rightUpdate { right = this.query[rt<<1|1] } this.merge(this.query[rt], left, right) } } // // 暴力实现的结构
列表(list)形如[,,]可以存放任意数量的事物。Head可以是任何事物,Tail通常仍然是个列表。只要用[…|T]构建一个列表,就应确保T是一个列表。同样使用模式匹配来提取列表中的元素。...Erlang中没有字符串,字符串是个整数列表,”HelloCloud”是一个列表的简写,io:format来指定打印输出。...在Erlang里,最小的寻址单元是1位,位串里的位序列可直接访问。 运行 运行Erlang程序的方式: 在Erlang shell 中编译执行 Shell 脚本执行,例 #!...Make 是erlang的任务自动化工具,可以通过它来运行程序。...是否注册 registered()->[AnAtom::atom()]返回系统里所有注册进程的列表。
2022-03-25:给定一个长度为 N 的字符串 S,由字符'a'和'b'组成,空隙由 '?' 表示。...替换为"aa" ,即"aaaabbb",则由相等字符组成的最长子串长度为4。 如果将"??"替换为"ba" ,即"aababbb",则由相等字符组成的最长子串长度为3。...那么方案二是更好的结果,返回3。 S的长度 <= 10^6。 来自CMU入学申请考试。 答案2022-03-25: 根据S的长度 是O(N)才能过。...1.左 == 右,中间问号长度是奇数。a?a变成aba。 2.左 == 右,中间问号长度是偶数。a????a变成abaaba。 3.左 != 右,中间问号长度是偶数。a????b变成ababab。...= 右,中间问号长度是大于1的奇数。a???b变成abaab或者aabab。 5.左 != 右,中间问号长度等于1。a?b的问号根据ab数量决定,谁小成全谁。相等的时候,成全左边。
领取专属 10元无门槛券
手把手带您无忧上云