风也温柔

计算机科学知识库

最大子数组算法 java-java使用非递归的方法求集合的所有子集合

  求一个数组和集合的所有的子数组或子集合最大子数组算法 java,其实是还是一件很难的事情,我以前一直觉得无法穷举最大子数组算法 java-java使用非递归的方法求集合的所有子集合,无从下手。数组和集合其实是一个意思的,下面我们以数组为例,遍历数组的所有的子数组;

  要求一个数组的子数组,可以转变一下思路,就是对原数组进行抽取元素,每一个元素都有被取或不被取,可以理解为0和1的状态,比如一个长度为3的数组,所有子数组,其实就是000~111的所有情况,这样的话最大子数组算法 java,一个长度为n的数组所有的子数组个数就是2的n次幂,也是00000...(n个0)~..(n个1),所以求所有的子数组就简单了

  步骤如下

  1 求数组的长度n,计算2的n次幂 nk

  2 从0到nk循环,每次转换为二进制

  java 找出数组中第n大的数_最大子数组算法 java_kmp算法 next数组 从1

  3 根据二进制的每一个位状态为0或1,对于不取或取,1则取,0不取,组成当前的子数组

  kmp算法 next数组 从1_最大子数组算法 java_java 找出数组中第n大的数

<p><pre>import java.util.ArrayList;
import java.util.List;
/**

  • 使用非递归的方法求数组的子数组
  • @author ssj
    *

*/
public class SubSetTest2 {

/**
   *   转换为二进制
 * @param decimal
 * @return
 */
public static String convertBinary(int decimal) {
    String str = "";
    while (decimal != 0) {
        str = decimal % 2 + str;
        decimal = decimal / 2;
    }
    return str.equals("")?"0":str;
}

public static void main(String[] args) {
    
    int [] arr= {1,2,3,4};
   
    List list = findAll(arr);
    System.out.println("所有子数组:"+list);
    System.out.println("子数组个数:"+list.size());
    
}

static List findAll(int []arr ) {
    //用于存放所有的子数组
    List list=new ArrayList();
    
    
    //求2的n次幂,因为n个元素的数组,子数组的个数就是2的n次幂,每一个元素都有可能存在和和不存在的两种状
    int nk=1;
    int k=1;
    while(k