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;

    }
}

posted @ 2022-10-06 13:17  ukyo--BlackJesus  阅读(10)  评论(0编辑  收藏  举报