首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

2023-06-24:给你一根长度 n 绳子, 请把绳子剪成整数长度 m 段, m、n都是整数,n > 1并且m > 1,

2023-06-24:给你一根长度 n 绳子, 请把绳子剪成整数长度 m 段, m、n都是整数,n > 1并且m > 1, 每段绳子长度记为 k[0],k[1]...k[m - 1]。...答案2023-06-24: 具体步骤如下: 1.如果n <= 3,返回n-1。 2.如果n > 3,计算剩下绳子长度n - 4,此时剩下长度4。...3.如果剩下长度0,即n3倍数,最后一段长度1;如果剩下长度2,最后一段长度2;如果剩下长度4,最后一段长度4。...4.计算3个数,即rest = n - (剩下长度);计算最后一段长度last。 5.利用快速幂算法计算3rest/3次方取mod后结果,记为power(3, rest/3)。...6.返回(power(3, rest/3) * last) % mod作为最大乘积结果。 例如,当n10,按照上述步骤计算: 1.n > 3且不是3倍数,剩下长度2,最后一段长度2。

15630

2021-08-26:长度N数组arr,一定可以组成N^2个数字

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编写。...复杂度,你肯定蒙了 func kthMinPair3(arr []int, k int) []int { N := len(arr) if k > N*N { return

39610

打印1到最大n位数

这道题是面试过可能会遇到手写代码题。如n3时,那么需要打印1到999。需要注意是当输入n很大时,最大n位数是不能通过int或者long long int来表示,此时可以使用字符数组来存储。...思路一: 1到n位最大数值采用字符数组存储。数值高位存储在字符数组低地址位。...这锻炼了考生耐心程度。一般面试时,写代码都不会很长,大概50左右。因此,我们可以换思路去考虑问题。...思路二: 换思路,n位所有十进制数其实就是n个0-9数全排列过程,只是排在前面的0我们不打印出来。 全排列可以用递归去写,递归结束条件是我们已经设置了数字最后一位。...总结: 如果面试题是关于n整数并且没有限定n取值范围,或者是输入任意大小整数,那么这个题目很有可能是需要考虑大数问题。字符串是一个简单、有效表示大数方法。

35510

算法题:合并N长度L有序数组一个有序数组(JAVA实现)

昨天面试被问到这道算法题,一时没有回答上来,今天思考了一下,参阅了网上教程,做了一个JAVA版本实现。...方案一: 新建一个N*L数组,将原始数组拼接存放在这个大数组中,再调用Arrays.sort()进行排序,或者使用其它排序方法即可。...此方法时间复杂度o(N*Llog2N*L); 具体代码实现如下: import java.util.Arrays; class Solution { public static int[] MergeArrays...思路:首先将N个数组第一位放到PriorityQueue,循环取出优先队列首位(最小值)放入result数组中,并且插入该首位数字所在数组下一个数字(如果存在),直到所有数字均被加入到result...= arr.length, L; if (N == 0)//此时传入数组空 return new int[0]; else {//判断数组是否符合规范

98640

算法题:合并N长度L有序数组一个有序数组(JAVA实现)

昨天面试被问到这道算法题,一时没有回答上来,今天思考了一下,参阅了网上教程,做了一个JAVA版本实现。...方案一: 新建一个N*L数组,将原始数组拼接存放在这个大数组中,再调用Arrays.sort()进行排序,或者使用其它排序方法即可。...此方法时间复杂度o(N*Llog2N*L); 具体代码实现如下: import java.util.Arrays; class Solution { public static int[] MergeArrays...思路:首先将N个数组第一位放到PriorityQueue,循环取出优先队列首位(最小值)放入result数组中,并且插入该首位数字所在数组下一个数字(如果存在),直到所有数字均被加入到result...= arr.length, L; if (N == 0)//此时传入数组空 return new int[0]; else {//判断数组是否符合规范

73640

2022-01-12:给定一个正数数组arr,长度n,下标0~n-1, a

2022-01-12:给定一个正数数组arr,长度n,下标0~n-1, arr中0、n-1位置不需要达标,它们分别是最左、最右位置, 中间位置i需要达标,达标的条件是 : arri-1 > arri...你每一步可以进行如下操作:对任何位置数让其-1, 你目的是让arr1~n-2都达标,这时arr称之为yeah!数组。 返回至少要多少步可以让arr变成yeah!数组。...数据规模 : 数组长度 <= 10000,数组中值<=500。 来自360面试。 答案2022-01-12: 方法一、动态规划。 方法二、贪心。 时间复杂度:O(N)。 空间复杂度:O(N)。...,可能减掉了一些,所以不能用arr[index-1] // preOk : 前一个位置值,是否被它左边数变有效了 // 返回 : 让arr都变有效,最小代价是什么?...,贪心 // 时间复杂度O(N) // 请注意,重点看上面的方法 // 这个最优解容易理解,但让你学到东西不是很多 func yeah(arr []int) int { if len(arr)

27510

打印从1到最大n位数

经过一番调整走出来了,心态调整好了,后续将保持正常学习进度 前言 有一个数字n,我们需要按照顺序输出从1到最大n位十进制数,例如:n = 3,则输出1、2、3...一直到最大3位数999。...循环解法 当我们过一眼这个问题后,脑海中想到第一个思路肯定是: 先求出这个最大n位数 用一个循环从1开始逐个打印至最大n位数 很轻松就能写出如下所示代码: export default class...,当n = 3时候可以正常输出1~999之间所有值,但是题目中n并没有规定具体范围,当n很大时候,超出了js可以表示最大范围,代码将无法运行。...提取正确数字 当递归基线条件满足时,我们就需要将当前数字位数组中打印出来,我们在存储时候给每一位数字后面加多了一个0,我们打印时需要进一步处理,取出有效值即可,实现思路如下: 通过遍历,取出数组中每一项字符串第...i < remove0Val.length; i++) { // 从0开始状态true且当前字符不为0 if (isBeginning0 && remove0Val[i] !

65430

2023-01-06:给定一个只由小写字母组成字符串str,长度N,给定一个只由0、1组成数组arr,长度N,arr[i

2023-01-06:给定一个只由小写字母组成字符串str,长度N, 给定一个只由0、1组成数组arr,长度N, arr[i]等于 0 表示str中i位置字符不许修改, arr[i] 等于...1表示str中i位置字符允许修改, 给定一个正数m,表示在任意允许修改位置, 可以把该位置字符变成a~z中任何一个, 可以修改m次。...返回在最多修改m次情况下,全是一种字符最长子串是多长。 1 <= N, M <= 10^5, 所有字符都是小写。 来自字节。 答案2023-01-06: 尝试全变成a一直到全变成z,遍历26次。...let m = rand::thread_rng().gen_range(0, n) + 1; let str = random_string(n, rr); let mut...='z' as u8 { for i in 0..n { let mut j = n - 1; while j >= i {

50330
领券