码迷,mamicode.com
首页 > 其他好文 > 详细

子序列的按位或 Bitwise ORs of Subarrays

时间:2018-09-23 20:41:37      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:描述   sharp   问题   时间复杂度   turn   hashset   com   bar   技术   

2018-09-23 19:05:20

问题描述:

技术分享图片

技术分享图片

问题求解:

显然的是暴力的遍历所有的区间是不可取的,因为这样的时间复杂度为n^2级别的,对于规模在50000左右的输入会TLE。

然而,最后的解答也可以看作是一个暴力求解,也就是用Set来保存以当前数为结尾的左右可能解,在下一轮中遍历上一轮的所有解并进行或操作。

这里有个难以一下想到的地方就是,乍一看,这个时间复杂度依然是平方级别的,但是实际上,这里的时间复杂度是n级别的,因为Set中后一个数中的1完全覆盖前一个数,因此,最多只有不超过30个数在Set中,因此整个时间复杂度依然是线性的时间复杂度。

技术分享图片

    public int subarrayBitwiseORs(int[] A) {
        Set<Integer> res = new HashSet<>();
        Set<Integer> cur = new HashSet<>();
        for (int i : A) {
            Set<Integer> tmp = new HashSet<>();
            tmp.add(i);
            for (Integer j : cur) tmp.add(i | j);
            res.addAll(tmp);
            cur = tmp;
        }
        return res.size();
    }

 

子序列的按位或 Bitwise ORs of Subarrays

标签:描述   sharp   问题   时间复杂度   turn   hashset   com   bar   技术   

原文地址:https://www.cnblogs.com/TIMHY/p/9693491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!