求一个数组和集合的所有的子数组或子集合最大子数组算法 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循环,每次转换为二进制
3 根据二进制的每一个位状态为0或1,对于不取或取,1则取,0不取,组成当前的子数组
<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