把一个N位的数组,每M个组成一组新的数组,内容不重复.
M<=N
这个排列组合问题用java迭代或者别的什么方法怎么解决。
困扰我一天了。
把一个N位的数组,每M个组成一组新的数组,内容不重复.
M<=N
这个排列组合问题用java迭代或者别的什么方法怎么解决。
困扰我一天了。
public void permutation(List<int[]> result, int[] arr, int index, int num){ if (index == num){ int[] newArr = new int[num]; System.arraycopy(arr, 0, newArr, 0, num); result.add(newArr); return; } for (int i = index; i < arr.length; i++) { swap(arr, index, i); permutation(result, arr, index + 1, num); swap(arr, index, i); } } private void swap(int arr[], int i, int j){ if(i != j){ arr[i] ^= arr[j]; arr[j] ^= arr[i]; arr[i] ^= arr[j]; } } @Test public void testPermutation() throws Exception { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8}; List<int[]> result = new ArrayList<>(); permutation(result, arr, 0, 2);//从arr中取两个元素排列(即N=8,M=2) System.out.println(result.size()); for (int[] is : result) { System.out.println(Arrays.toString(is)); } }
认为简单的方式可以归结为一个递归的问题,算法:
计算(已经包含的元素initSet,数组N,检索的起点s,需要枚举的数量M)
如果M=1 则 //initSet只需要添加一个元素即可,那么此时只需要枚举后面的元素加入 集合即为最终的结果;
for j = s to N.size
R = initSet + N[j];
输出结果R;
否则 //分别将起点S到N末尾的每个元素作为集合的必选项,加入集合,然后M-1
initSet += s;
for j = s to N.size - 1
计算(initSet,j,M-1)
结束。
初始调用: 计算(EmptySet,数组N,起点0,M具体值)
相关推荐
4. **检查数组长度**:如果数组不为空,将第一个对象的`str`属性值赋给`_tmp`,为后续循环做准备。 5. **遍历数组**:使用`for...in`循环遍历数组,检查每个对象的`str`属性值是否与`_tmp`相等。如果相等,将该对象...
2. **转换与去重**:接下来,对`$array2D`中的每个子数组进行遍历,将每个子数组的元素用逗号连接成字符串,形成一个新的数组`$temp`。这样做的目的是便于后续的去重操作,因为`array_unique()`函数能够处理字符串...
首先,理解函数`getArrayItems(arr,num)`的作用:它接受两个参数,`arr`是一个已经存在的数组,`num`是需要从`arr`中随机取出的不重复元素的数量。函数的返回值也是一个数组,包含随机抽取的不重复元素。 函数的...
问题描述:给定一个非空的由整数组成的数组,代表一个非负整数,数组中的每个元素存储一个数字位,将这个数加一。 解决方法:从数组的最低位开始,模拟加一操作,注意进位问题。 8. 移动零 问题描述:给定一个数组...
在“清除数组重复成员.zip”这个压缩包中,包含了一个易语言程序源码,该源码的功能是处理数组,移除其中的重复元素,这对于数据处理和算法理解来说是一个基础但重要的知识点。 首先,我们来讨论数组的基本概念。...
- 描述:已知数组`int x[10] = {13, 24, 35, 46, 57, 68, 79, 88, 93}`,请将用户输入的一个数字按照从小到大的顺序插在对应的位置后输出整个数组。 - 关键知识点: - 输入输出操作:使用`scanf`接收用户输入,...
`arrayfun`函数可以对数组中的每个元素应用一个函数,返回一个新的数组。例如,如果我们想将数组A的每个元素平方,可以这样做: ```matlab A = 1:5; B = arrayfun(@sqrt, A); % 计算A的每个元素的平方根 ``` ### 4...
标题提到的"易语言取数组中重复文本下标源码"就是解决此类问题的一个代码示例。易语言是一种中文编程语言,其语法简洁明了,适合初学者和专业开发者使用。 易语言中的数组可以存储各种类型的数据,包括文本。在处理...
传统的做法通常是通过循环遍历其中一个数组,然后在另一个数组中检查每个元素是否存在,如果不存在则将其添加到结果数组中。然而,这种方法效率较低,特别是在处理大数据量的数组时。这里介绍的是一种巧妙的方法,它...
最直接的方法是定义一个辅助函数,用于判断新数组中是否已经包含了将要加入的元素。实现代码如下: ```javascript function filterArray(receiveArray) { var arrResult = new Array(); // 定义一个返回结果数组 ...
(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考); 先给初学者解释一下什么叫数组去重(老鸟跳过):意思就是讲数组里面重复的元素...
在JavaScript编程中,有时我们需要从一个数组中随机抽取若干个不重复的元素。这个功能在游戏开发、模拟、测试用例生成或者数据分析等场景中都可能用到。本篇文章将详细解析一个原创的JavaScript函数,它能从一个给定...
这样做的原因是,如果当前元素比前一个子数组的最后一个元素大,那么新的子数组可以从当前元素开始;如果当前元素小于或等于前一个子数组的最后一个元素,那么可能更优的选择是保留之前的子数组,而不是从当前元素...
通常,我们会使用一个临时数组来存储不重复的元素,然后遍历两个原始数组,将不在临时数组中的元素添加进去。具体步骤如下: 1. 初始化:创建一个空的临时数组,用于存放不重复的元素。同时,设定两个指针,分别...
这段代码首先定义了一个新的空数组`new_arr`,然后遍历原始数组`arr`。在每次循环中,它检查当前元素`items`是否已经在`new_arr`中。如果不在,就使用`push()`方法将其添加到`new_arr`的末尾。这样,当我们遍历完整...
* 拷贝指的是将某个数组的内容拷贝到另一个数组中。 数组的遍历可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。 for-each 循环是 JDK1.5 新增加的功能,专门用于读取数组或集合中所有...
当尝试向数组中添加一个已经存在的元素时,Vue不会识别这是一个新的操作,因此不会触发视图的更新。 在不使用`track-by`属性的情况下,如示例代码中的2.1和2.2所示,当你点击按钮尝试添加`'tamota'`到`arrMsg`数组...
数组允许我们存储和操作一组相同类型的数据,这些数据在内存中是连续存放的,可以通过一个唯一的索引来访问每个元素。数组的索引通常从0开始,因此,如果我们有一个长度为n的数组,我们可以访问从0到n-1的所有位置。...
在JavaScript编程中,生成不重复的随机数组是一个常见的需求,特别是在模拟随机数据、游戏开发或者进行各种算法测试时。本文将详细讲解如何使用JS来实现这个功能,通过一个简单的实例来帮助你理解并掌握这个技巧。 ...