2022-12-22:给定一个数字n,代表数组的长度,给定一个数字m,代表数组每个位置都可以在1~m之间选择数字,所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。返回达标数组的数量。...1 n m 的时候没有取模的逻辑,因为非重点。来自微众银行。...// f、s、t : ends数组中放置的数字!...// n : 一共的长度!// m : 每一位,都可以在1~m中随意选择数字// 返回值:i..... 有几个合法的数组!...// 尤其是理解ends数组的意义!fn number2(n: i32, m: i32) -> i32 { //repeat(vec!
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。...返回达标数组的数量。 1 n <= 500, 1 m <= 10, 500 * 10 * 10 * 10, 结果对998244353取模, 实现的时候没有取模的逻辑,因为非重点。...// f、s、t : ends数组中放置的数字!...// n : 一共的长度! // m : 每一位,都可以在1~m中随意选择数字 // 返回值:i..... 有几个合法的数组!...// 尤其是理解ends数组的意义! fn number2(n: i32, m: i32) -> i32 { //repeat(vec!
题目:从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的 Fisher-Yates洗牌算法是由 Ronald A.Fisher和Frank Yates于1938年发明的,后来被Knuth...用洗牌算法思路从1、2、3、4、5这5个数中,随机取一个数 4被抽中的概率是1/5 5被抽中的概率是1/4 * 4/5 = 1/5 2被抽中的概率是1/3 * 3/4 *...O(n^2), 空间复杂度为O(n) 代码如下: //O(N^2)time //O(N)space void test(int n, int m) { List list...该算法的基本思想和 Fisher 类似,每次从未处理的数据中随机取出一个数字,然后把该数字放在数组的尾部,即数组尾部存放的是已经处理过的数字。...时间复杂度为O(n), 空间复杂度为O(n) //O(N)time //O(N)space void knuth(int n, int m) { int[] arr = new int[n];
import java.util.ArrayList; import java.util.List; /** * @program: simple_tools * @description: 从N个元素里面取...M个指定长度的组合列表 * @author: Mr.chen * @create: 2020-06-08 17:24 **/ public class CombinationUtil {
2021-06-30:给定长度为m的字符串aim,以及一个长度为n的字符串str ,问能否在str中找到一个长度为m的连续子串, 使得这个子串刚好由aim的m个字符组成,顺序无所谓, 返回任意满足条件的一个子串的起始位置...all := M R := 0 // 0~M-1 for ; R M; R++ { // 最早的M个字符,让其窗口初步形成 if count[s1[R]] >...all-- } else { count[s1[R]]-- } } // 窗口初步形成了,并没有判断有效无效,决定下一个位置一上来判断...// 接下来的过程,窗口右进一个,左吐一个 for ; R < len(s1); R++ { if all == 0 { // R-1 return...else { count[s1[R]]-- } if count[s1[R-M]] >= 0 { count[s1[R-M
2023-06-24:给你一根长度为 n 的绳子, 请把绳子剪成整数长度的 m 段, m、n都是整数,n > 1并且m > 1, 每段绳子的长度记为 k[0],k[1]...k[m - 1]。...*k[m - 1] 可能的最大乘积是多少? 例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 答案需要取模1000000007。 输入: 10。...答案2023-06-24: 具体步骤如下: 1.如果n n-1。 2.如果n > 3,计算剩下绳子长度为n - 4,此时剩下的长度为4。...3.如果剩下的长度为0,即n为3的倍数,最后一段长度为1;如果剩下的长度为2,最后一段长度为2;如果剩下的长度为4,最后一段长度为4。...6.返回(power(3, rest/3) * last) % mod作为最大乘积的结果。 例如,当n为10,按照上述步骤计算: 1.n > 3且不是3的倍数,剩下的长度为2,最后一段长度为2。
2022-07-09:总长度为n的数组中,所有长度为k的子序列里,有多少子序列的和为偶数?答案2022-07-09:方法一:递归,要i还是不要i。方法二:动态规划。需要两张dp表。代码用rust编写。...k = rand::thread_rng().gen_range(0, n) + 1; let mut arr = random_array(n, vv); let ans1...= arr.len() as i32; // even[i][j] : 在前i个数的范围上(0...i-1),一定选j个数,加起来是偶数的子序列个数 // odd[i][j] : 在前i个数的范围上...(0...i-1),一定选j个数,加起来是奇数的子序列个数 let mut even: Vec> = vec!...=n { for j in 1..
题目: 输入两个整数 n 和 m,从数列1,2,3…….n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。...解题思路: 好未来笔试题中的一道题目,是背包问题的一个衍生问题,设i是1,2,3…….n 中的一个数,那么从i=1开始,(n,m,i)的问题就可以变成(n,m-i,i+1)的子问题,依次递归下去,这样会有两个结果...,一个是m被减成了0,一个是i比m大甚至i比n大。...举个例子,假设n=3,m=4,i的初始值为1,组合结果为v: 调用函数:(3,4,1) v[1] 第一层递归:(3,3,2) v...直到在第0层的时候,i>n,即 v[3]的情况,所有的递归就都结束了。
昨天面试被问到这道算法题,一时没有回答上来,今天思考了一下,参阅了网上的教程,做了一个JAVA版本的实现。...方案一: 新建一个N*L的数组,将原始数组拼接存放在这个大数组中,再调用Arrays.sort()进行排序,或者使用其它排序方法即可。...,用于保存这N个数组的index,定义Node类用于保存当前数值(value)和该数字所在的数组序号(idx),并且覆写Comparetor的compare方法实现自定义排序。...思路:首先将N个数组的第一位放到PriorityQueue,循环取出优先队列的首位(最小值)放入result数组中,并且插入该首位数字所在数组的下一个数字(如果存在),直到所有数字均被加入到result...= arr.length, L; if (N == 0)//此时传入数组为空 return new int[0]; else {//判断数组是否符合规范
2024-07-06:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组的元素只包含-1、0和1。...我们定义“匹配”的子数组,对于一个大小为m+1的子数组nums[i..j],如果对于pattern数组中的每个元素pattern[k]都满足以下条件: 1.如果pattern[k]为1,则nums[i+...大体步骤如下: 1.将 pattern 数组的长度记录为 m,接着为了方便处理,在 pattern 后面添加一个号码 2。...4.利用 Z 算法计算 pattern 的每个位置与后面的匹配长度。 5.遍历计算出的匹配长度数组,寻找长度为 m 且符合匹配模式的子数组。 6.返回最终匹配的子数组数量。...整体时间复杂度为 O(n),其中 n 为 nums 数组的长度。额外空间复杂度为 O(n),用于存储额外的辅助信息。
2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。...一个子数组nums[i..j]的大小为m+1,如果满足以下条件,则我们称该子数组与模式数组pattern匹配: 1.若pattern[k]为1,则nums[i+k+1] > nums[i+k]; 2.若...2.countMatchingSubarrays函数的作用是计算匹配模式数组pattern的nums子数组的数量。它首先将模式数组pattern的长度赋值给m,然后在模式数组末尾添加一个值为2的元素。...然后利用两个指针l和r,以及i遍历模式数组,并根据当前位置i和匹配长度z[i]更新l、r和z[i]的值,直到找到所有的匹配长度。...4.最后,在z数组中,从第m+1个值开始遍历,如果匹配长度等于模式数组长度m,则将计数器ans加一。 综上所述,总的时间复杂度为O(n)(n为nums数组的长度),总的额外空间复杂度为O(n)。
2022-08-22:给定一个数组arr,长度为n,最多可以删除一个连续子数组, 求剩下的数组,严格连续递增的子数组最大长度。 n <= 10^6。 来自字节。5.6笔试。...("测试开始"); for _ in 0..test_time { let mut m = rand::thread_rng().gen_range(0, n);...[]; for _ in 0..n { dp.push(0); } dp[0] = 1; let mut ans = 1; // 一个数字也不删!...长度!...// // 1~rank-1 : 第二个信息的max let mut p2 = if rank0 > 1 { st.max1(rank0 - 1) + 1 }
2024-09-25:用go语言,给定一个长度为 n 的整数数组 nums 和一个正整数 k, 定义数组的"能量"为所有和为 k 的子序列的数量之和。...请计算 nums 数组中所有子序列的能量和,并对结果取模 10^9 + 7 后返回。 输入:nums = [1,2,3], k = 3。 输出:6。...大体步骤如下: 1.定义一个数组 f 用于记录不同和值下的子序列数量,数组长度为 k+1,初始时令 f[0] = 1 表示和为 0 时只有空子序列存在。...这表示由于当前的 j 无法和当前的 x 相加得到新的和值,因此只能将和为 j 的子序列数量乘以 2。 3.最终返回 f[k],即所有和为 k 的子序列的数量之和。...总体的时间复杂度是 O(n * k),其中 n 是 nums 的长度,k 是给定的正整数。 空间复杂度为 O(k)。
题目 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, 问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置...本题的子串需要满足长度为m,字符不重复,可以使用长为m的滑动窗口遍历字符串,窗口内每个字符都要出现一次,如果符合条件,就返回窗口起始位置。...滑动窗口算法 滑动问题包含一个滑动窗口,它是一个运行在一个大数组上的子列表,该数组是一个底层元素集合。...假设有数组 [a b c d e f g h ],一个大小为 3 的滑动窗口在其上滑动,则有: [a b c] [b c d] [c d e] [d e f] [...代码 /** * 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata, * 能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面
2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m , 数组下标 从 1 开始 计数。 初始时,你的分数为 0 。...你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要: 选择数组 nums 开头处或者末尾处 的整数 x 。...你获得 multipliers[i] * x 分,并累加到你的分数中。 将 x 从数组 nums 中移除。 在执行 m 步操作后,返回 最大 分数。 力扣1770。..., M+1) } for L := M - 1; L >= 0; L-- { for j := L + 1; j M; j++ { R := N - M + j - 1...indexB := L + N - R - 1 dp[L][j] = getMax(A[L]*B[indexB]+dp[L+1][j], A[R]*B[indexB]+dp[L
2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。...返回所有可能的结果中,代表最大数字的结果。 福大大 答案2021-04-05: 自然智慧想不到,需要练敏感度。 1.动态规划+选元素+双指针的合并。无代码。...2.动态规划+选元素+双指针的DC3合并。有代码。 2.1.dpi,i是数组序号,j是0,K的数,dpi是最优位置。 2.2.从arr1和arr2中选元素。...2.3.合并arr1中的选中的元素和arr2中的选中的元素,采用dc算法。 2.4.返回最大值。 代码用golang编写。...~ N maxIndex := size - get // i~N-1 for i := size - get; i >= 0; i-- {
2021-08-26:长度为N的数组arr,一定可以组成N^2个数字对。...第一维数据从小到大;第一维数据一样的,第二维数组也从小到大,所以上面的数值对排序的结果为:(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)(3,1)(3,2)(3,3)。...给定一个数组arr,和整数k,返回第k小的数值对。 福大大 答案2021-08-26: 1.暴力解。 时间复杂度:(N^2 * log(N^2)). 2.下标定位+bfprt算法。 2.1.k--。...i1=k/N。 i2=k%N。 2.3.根据bfprt算法求出第i1小和第i2小的数。 时间复杂度:O(N)。 空间复杂度:O(1)。arr数组里的元素顺序会发生变化。 代码用golang编写。...nil } // 在无序数组中,找到第K小的数,返回值 // 第K小,以1作为开始 fristNum := getMinKth(arr, (k-1)/N) //
2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m , 数组下标 从 1 开始 计数。 初始时,你的分数为 0 。...你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要: 选择数组 nums 开头处或者末尾处 的整数 x 。 你获得 multipliersi * x 分,并累加到你的分数中。...将 x 从数组 nums 中移除。 在执行 m 步操作后,返回 最大 分数。 力扣1770。 答案2022-04-09: 样本对应模型。 代码用golang编写。...:= len(A) M := len(B) dp := make([][]int, M+1) for i := 0; i M+1; i++ { dp[i] = make([]int, M+...1) } for L := M - 1; L >= 0; L-- { for j := L + 1; j M; j++ { R := N - M + j - 1 indexB
领取专属 10元无门槛券
手把手带您无忧上云