0 0

把一个N位的数组,每M个组成一组新的数组,内容不重复,怎么做?0

把一个N位的数组,每M个组成一组新的数组,内容不重复.

 

M<=N

 

这个排列组合问题用java迭代或者别的什么方法怎么解决。

 

困扰我一天了。

2014年10月15日 16:05

2个答案 按时间排序 按投票排序

0 0

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));
        }
    }

2014年10月17日 13:43
0 0

认为简单的方式可以归结为一个递归的问题,算法:

计算(已经包含的元素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具体值)

2014年10月16日 08:44

相关推荐

    javascript实现数组去重的多种方法

    (要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考); 先给初学者解释一下什么叫数组去重(老鸟跳过):意思就是讲数组里面重复的元素...

    LeetCode去除数组重复元素-leetcode_[removed]刷题

    编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 ""。 Valid Parentheses(有效的括号) 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串...

    javascript入门笔记

    条件是一个boolean类型的数据,如果条件结果为true,则执行表达式1的内容,并将表达式1的结果作为整体表达式的结果。如果条件为false,则执行表达式2的内容,并将表达式2的结果作为整体表达式的结果 ex: var age ...

    c语言合并两个已排序数组的示例(c语言数组排序)

    问题:将两个已排序数组合并成一个排序数组 这里先不考虑大数据量的情况(在数据量很大时不知大家有什么好的思路或方法?),只做简单数组的处理。 简单代码如下: 说明:之所以把merge函数定义成返回数组长度,是因为...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    第四届 蓝桥杯 竞赛试题题目 C/C++高职高专组

     地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg)    从 我 做 起 振  我 做 起 振 兴  做 起 振 兴 中  起 振 兴 中 华      比赛时,先站在左上角的写着“从”字的格子里,可以横向...

    世界500强面试题.pdf

    1.6.3. 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数 位于数组的后半部分 ...........................................................130 1.6.4. 给定链表的头指针和一个...

    C 语言编程常见问题解答.chm

    9.8 为什么用const说明的常量不能用来定义一个数组的初始大小? 9.9 字符串和数组有什么不同? 第10章 位(bit)和字节(byte) 10.1 用什么方法存储标志(flag)效率最高? 10.2 什么是“位屏蔽(bit masking)”...

    leetcode答案-LeetCode:LeetCode上一些题的答案,虽然可能不是最优的答案,但是已经通过测试用例

    缺失的第一个正数 困难 46 全排列 中等 48 旋转图像 中等 70 爬楼梯 简单 74 搜索二维矩阵 中等 75 颜色分类 中等 77 组合 中等 78 子集 中等 83 删除排序链表中的重复元素 简单 94 二叉树的中序遍历 中等 98 验证...

    JavascriptFastArray:数组的近乎纯数组的速度实现,简单美观

    (此实现仅对集合ID有用,但是现在我正在尝试使用它,我想您也可以通过具有一个包含多个数组的对象或一个数组数组来创建一个顺序的版本就像在此实现中一样,并编写一些函数以支持对其进行迭代,以便普通的连续数组...

    数据结构(C++)有关练习题

    &lt;br&gt;实验四 综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素...

    C语言编程要点

    9.8. 为什么用const说明的常量不能用来定义一个数组的初始大小? 145 9.9. 字符串和数组有什么不同? 145 第10章 位(bit)和字节(byte) 147 10.1. 用什么方法存储标志(flag)效率最高? 147 10.2. 什么是“位屏蔽(bit ...

    最新JAVA编程题全集_50题及答案

    写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";...

    超级有影响力霸气的Java面试题大全文档

     SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。...

    excel的使用

    为了计算上的方便,一组变量最好给一个数组名。例如A={A1:C3}、B={E1:G3}等。数组名的设置步骤是:选定数组域,单击“插入”菜单,选择“名称”项中的“定义”命令,输入数组名,单击“确定”按钮即可。更简单的...

    用C编写班级成绩管理系统

    对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。 二、功能要求: 1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称...

Global site tag (gtag.js) - Google Analytics