首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法-1到n中所有m组合

题目: 输入两个整数 n m,从数列1,2,3…….n 中随意取几个数,使其等于 m ,要求将其中所有的可能组合列出来。...解题思路: 好未来笔试题中一道题目,是背包问题一个衍生问题,设i是1,2,3…….n 中一个数,那么从i=1开始,(n,m,i)问题就可以变成(n,m-i,i+1子问题,依次递归下去,这样会有两个结果...举个例子,假设n=3,m=4,i初始1,组合结果v: 调用函数:(3,4,1) v[1] 第一层递归:(3,3,2) v...) m=0 找到满足条件一组数 退回到第一层,且i>m 退回到第一层 第一层递归:(3,3,4) v[1,4] i>m 退回到第0层...直到在第0时候,i>n,即 v[3]情况,所有的递归就都结束了。

1.8K50
您找到你想要的搜索结果了吗?
是的
没有找到

1. Two Sum(HashMap储存数组索引)

(给定一个整数数组一个目标值,找出数组中和目标值两个数索引。 你可以假设每个输入只对应一种答案,且同样元素不能被重复利用。)...【分析】 target是两个数字题目要求返回是两个数索引,所以我们可以用HashMap来分别储存数值索引。 我们用key保存数值,用value保存索引。...然后我们通过遍历数组array来确定在索引i处,map中是否存在一个x,等于target - array[i]。...如果存在,那么map.get(target - array[i])就是其中一个数值索引,i即为另一个。...以题目中给example例: 在索引i = 0处,数组所储存2,target等于9,target - array[0] = 7,那么value =7所对应key即为另一个索引,即i = 2

94210

怎么在a_boolTrue条件拼接aa_1?

就像这样: thon" 实现过程 这里【月神】给了一份代码,如下所示: c2['a_new'] = c2['a'] + ('_' + c2['a_1']) * c2['a_bool'] 代码运行之后...,结果如下图所示: 好牛逼解法,可谓恰到好处,直接把布尔值当成数值进行计算了,有创意!...其实关于布尔用法解析,在之前文章中,我也有写过,Python中andor,结果让人出乎意料之外,最开始是【小小明】大佬启蒙,之后【瑜亮老师】给我们启蒙,现在大家也拓展了思路,下次遇到了,就可以多一个思路了...这篇文章主要盘点一个字符串拼接问题,借助布尔本身就是01规律,直接进行运算,拓展了粉丝思路!如果你还有其他方法,也欢迎大家积极尝试,一起学习,记得分享给我哦。...最后感谢粉丝【有点意思】提问,感谢【月神】在运行过程中给出思路代码建议,感谢粉丝【dcpeng】等人参与学习交流。

61710

2022-12-26:有一个数组包含01、2三种, 有m次修改机会,第一种将所有连通1变为0,修改次数-1, 第二种将所有连通2变为10,修改次数-2

2022-12-26:有一个数组包含01、2三种,有m次修改机会,第一种将所有连通1变为0,修改次数-1,第二种将所有连通2变为10,修改次数-2,返回m次修改机会情况下,让最大0连通区,...1 <= arr长度 <= 10^6,0 <= 修改机会 <= 10^6。答案2022-12-26:六个辅助数组。时间复杂度:O(N)。代码用shell编写。代码如下:#!.../bin/bash# 时间复杂度O(N^3)方法# 为了验证# public static int maxZero1(int[] arr, int k)function maxZero1(){...= 2 ];then let area2s[$[$n-1]]=area2 fi local has1=0 local area1=0 local i=0 while...0 if [ ${arr[$left]} == 0 ] && [ ${arr[$right]} == 0 ];then let area1=area1s[right]-area1s[

43930

2022-12-26:有一个数组包含01、2三种,有m次修改机会,第一种将所有连通1变为0,修改次数-1,第二种将所有连通

2022-12-26:有一个数组包含01、2三种, 有m次修改机会,第一种将所有连通1变为0,修改次数-1, 第二种将所有连通2变为10,修改次数-2, 返回m次修改机会情况下,让最大0...1 <= arr长度 <= 10^6, 0 <= 修改机会 <= 10^6。 答案2022-12-26: 六个辅助数组。 时间复杂度:O(N)。 代码用shell编写。代码如下: #!.../bin/bash # 时间复杂度O(N^3)方法 # 为了验证 # public static int maxZero1(int[] arr, int k) function maxZero1()...0 if [ ${arr[$left]} == 0 ] && [ ${arr[$right]} == 0 ];then let area1=area1s[right]-area1s...done if [ $has1 == 1 ];then let areaHas1No0++ fi let local ans=2*$area2+areaHas1No0

72710

2022-08-24:给定一个长度3N数组,其中最多含有01、2三种, 你可以把任何一个连续区间上数组,全变成01、2中一种, 目的是让01、2

2022-08-24:给定一个长度3N数组,其中最多含有01、2三种,你可以把任何一个连续区间上数组,全变成01、2中一种,目的是让01、2三种数字个数都是N。返回最小变化次数。...统计0,1,2扣去N/3个数之和。比如1,1,11有3个,多了两个;02都是0个,不统计;所以结果是2。时间复杂度:O(N)。代码用rust编写。.../ 0 -> 7个// 2 -> 12个 1 -> 11个// 多数 2// 少0fn modify(arr: &mut Vec, more: i32, more_t: i32,...] += 1; ll += 1; } else { // 在窗口之外,多数,够了!...// 少数,,另一种数other,能不能平均!都是10个!

75310

2021-11-28:有一棵树,给定头节点h,结构数组m,下标0不用。比如h = 1, m = ,

2021-11-28:有一棵树,给定头节点h,结构数组m,下标0不用。...比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []], 表示1孩子是2、3; 2孩子是4; 3孩子是5、6; 4、56是叶节点,都不再有孩子, 每一个节点都有颜色...,记录在c数组里,比如c[i] = 4, 表示节点i颜色4, 一开始只有叶节点是有权,记录在w数组里, 比如,如果一开始就有w[i] = 3, 表示节点i是叶节点、且权是3。...w[i] = Max { (颜色a所有孩子个数 + 颜色a孩子权之和), (颜色b所有孩子个数 + 颜色b孩子权之和),...(颜色k所有孩子个数 + 颜色k孩子权之和) } 请计算所有孩子并返回。

22020

2023-04-16:给定一个长度N数组一定在0~N-1范围,且每个不重复比如,arr = [4, 2, 0, 3,

2023-04-16:给定一个长度N数组一定在0~N-1范围,且每个不重复 比如,arr = [4, 2, 0, 3, 1] 0 1 2 3 4 把0想象成洞...,任何非0数字都可以来到这个洞里,然后在原本位置留下洞 比如4这个数字,来到0所代表洞里,那么数组变成 : arr = [0, 2, 4, 3, 1] 也就是原来洞被4填满,4走后留下了洞 任何数字只能搬家到洞里...,并且走后留下洞 通过搬家方式,想变成有序,有序有两种形式 比如arr = [4, 2, 0, 3, 1],变成 [0, 1, 2, 3, 4]或者[1, 2, 3, 4, 0]叫有序。...返回变成任何一种有序情况都可以,最少数字搬动次数。 来自谷歌。 答案2023-04-16: # 解题步骤: 1....对于第二种有序情况,我们可以先倒序遍历数组,找出每个数需要移动最小距离,从而计算出需要移动次数。 3. 最后比较这两种情况下最小搬动次数,返回较小即可。 注意事项: 1.

28930

2021-06-26:给定一个只有01组成二维数组,返回边框全是1最大正方形面积。

2021-06-26:给定一个只有01组成二维数组,返回边框全是1最大正方形面积。 福大大 答案2021-06-26: 1.自然智慧。遍历每个点,复杂度是O(N2)。...每个点往右下看1到n正方形,复杂度是O(N),每个正方形,判断边框是否1,复杂度是O(N)。所以总体时间复杂度是O(N4),额外空间复杂度是O(1)。 2.每个正方形边框是否1优化。...时间复杂度可以优化成O(1)。准备两个二维数组。一个二维数组,记录dpToRighti,表示当前点往右看1个数。另一个二维数组,记录dpToDowni,表示当前点往下看1个数。...//获取最小 edge := getMin(dpToRight[i][j], dpToDown[i][j]) //左上点求小边...i < N; i++ { for j := 0; j < M; j++ { //dp[i][j]是左上点 //获取最小

38510

2021-06-26:给定一个只有01组成二维数组,返回边框全是1最大正方形面积。

2021-06-26:给定一个只有01组成二维数组,返回边框全是1最大正方形面积。 福大大 答案2021-06-26: 1.自然智慧。遍历每个点,复杂度是O(N**2)。...每个点往右下看1到n正方形,复杂度是O(N),每个正方形,判断边框是否1,复杂度是O(N)。所以总体时间复杂度是O(N**4),额外空间复杂度是O(1)。 2.每个正方形边框是否1优化。...时间复杂度可以优化成O(1)。准备两个二维数组。一个二维数组,记录dpToRight[i][j],表示当前点往右看1个数。...另一个二维数组,记录dpToDown[i][j],表示当前点往下看1个数。将近一天研究,以为时间复杂度可以优化成O(N**2),但实际上并不能,至少我目前没想出来。...i < N; i++ { for j := 0; j < M; j++ { //dp[i][j]是左上点 //获取最小

38230

2023-04-16:给定一个长度N数组一定在0~N-1范围,且每个不重复比如,arr =

2023-04-16:给定一个长度N数组一定在0~N-1范围,且每个不重复比如,arr = 4, 2, 0, 3, 10 1 2 3 4把0想象成洞,任何非0数字都可以来到这个洞里,然后在原本位置留下洞比如...4这个数字,来到0所代表洞里,那么数组变成 : arr = 0, 2, 4, 3, 1也就是原来洞被4填满,4走后留下了洞任何数字只能搬家到洞里,并且走后留下洞通过搬家方式,想变成有序,有序有两种形式比如...arr = 4, 2, 0, 3, 1,变成0, 1, 2, 3, 4或者1, 2, 3, 4, 0叫有序。...对于第二种有序情况,我们可以先倒序遍历数组,找出每个数需要移动最小距离,从而计算出需要移动次数。最后比较这两种情况下最小搬动次数,返回较小即可。...这种样子,至少交换几次// ans2 : 1 2 3 4 .... 0 这种样子,至少交换几次// m : 每个环里有几个数// next : 往下跳位置n := len(nums)ans1, ans2

76600

2023-03-16:给定一个由 0 1 组成数组 arr ,将数组分成 3 个非空部分,使得所有这些部分表示相同

2023-03-16:给定一个由 0 1 组成数组 arr ,将数组分成 3 个非空部分, 使得所有这些部分表示相同二进制。...注意,在考虑每个部分所表示二进制时,应当将其看作一个整体, 例如,[1,1,0] 表示十进制中 6,不会是 3。此外,前导零也是被允许, 所以 [0,1,1] [1,1] 表示相同。...输入:由 0 1 组成数组 arr,长度 n(1 ≤ n ≤ 3×10^4),且只包含数字 0 1。...输出:长度 2 数组,表示能够将 arr 分成三个部分 第一个第二个部分结束位置(下标从 0 开始)。如果无法做到则返回 [-1, -1]。...该算法核心思路是计算目标值 target_val,并在遍历整个数组两次过程中找到第一个第二个部分结束位置 i j。该算法时间复杂度 O(n),空间复杂度 O(1)。

24720

2023-03-16:给定一个由 0 1 组成数组 arr ,将数组分成 3 个非空部分, 使得所有这些部分表示相同二进制。 如果可以做到,请返回任

2023-03-16:给定一个由 0 1 组成数组 arr ,将数组分成 3 个非空部分, 使得所有这些部分表示相同二进制。...注意,在考虑每个部分所表示二进制时,应当将其看作一个整体, 例如,1,1,0 表示十进制中 6,不会是 3。此外,前导零也是被允许, 所以 0,1,1 1,1 表示相同。...输入:由 0 1 组成数组 arr,长度 n(1 ≤ n ≤ 3×10^4),且只包含数字 0 1。...输出:长度 2 数组,表示能够将 arr 分成三个部分时第一个第二个部分结束位置(下标从 0 开始)。如果无法做到则返回 -1, -1。...该算法核心思路是计算目标值 target_val,并在遍历整个数组两次过程中找到第一个第二个部分结束位置 i j。该算法时间复杂度 O(n),空间复杂度 O(1)。

1.2K10
领券