Subsets of Array
寻找一组数组中不重复元素的子集
package com.example.mathematicaldemo.demo;
import lombok.extern.slf4j.Slf4j;
/**
* 资料:
* https://easylearn.baidu.com/edu-page/tiangong/questiondetail?id=1733407185484769562&fr=search
* https://www.baidu.com/s?wd=2%5E7&rsv_spt=1&rsv_iqid=0xb01663880001013f&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=tb&rsv_enter=1&rsv_sug3=9&rsv_sug1=8&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&prefixsug=2%255E7&rsp=5&inputT=3993&rsv_sug4=4834
*/
import java.util.Arrays;
@Slf4j
public class SubsetsOfArrayDemo {
public static void main(String[] args) {
var arr = new int[]{67, 111, 87, 108, 104, 121, 17, 119, 70, 80, 105, 2, 56, 20, 112, 26, 29, 50, 16, 0, 81, 6, 101, 49, 8, 65, 91, 40, 7, 74, 31, 11, 97, 100, 62, 59, 77, 46, 90, 116, 78, 28, 34, 13, 71, 43, 98, 92, 60, 115, 35, 64, 94, 23, 37, 21, 53, 84, 4};
long count = count(arr);
log.info("count:{}",count);
log.info("count2:{}",count2(arr));
}
//方式一
public static <T> long count(int[] elems) {
int length = elems.length;
log.info("original length:{}",length);
long count = Arrays.stream(elems).distinct().count();
log.info("count method count:{}",count);
log.info("Math.pow(2,count):{}",(long)Math.pow(2,count));
return (long) (Math.pow(2,count))-1;
}
//方式二
public static <T> long count2(int[] elems){
long count = Arrays.stream(elems).distinct().count();
//不能没有L
return (1L<<count)-1;
}
}
本文来自博客园,作者:ukyo--BlackJesus,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/16757455.html