【每日一题Day136】LC982按位与为零的三元组 | 哈希表

简介: 【每日一题Day136】LC982按位与为零的三元组 | 哈希表

按位与为零的三元组【LC982】

给你一个整数数组 nums ,返回其中 按位与三元组 的数目。

按位与三元组 是由下标 (i, j, k) 组成的三元组,并满足下述全部条件:

  • 0 <= i < nums.length
  • 0 <= j < nums.length
  • 0 <= k < nums.length
  • nums[i] & nums[j] & nums[k] == 0 ,其中 & 表示按位与运算符。

先就这样 晚上要考试 好焦虑

  • 思路:

暴力枚举的时间复杂度是O ( n 3 ) ,可以使用哈希表优化时间复杂度,类似四数之和

  • 使用哈希表记录所有二元组相与后的结果出现的次数,然后枚举nums[k]和哈希表的key值,如果相与后结果为0,那么将二元组出现的次数累加至结果中
  • 实现
class Solution {
    public int countTriplets(int[] nums) {
        int ans = 0;
        int n = nums.length;
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++){
            for (int j = 0; j < n; j++){
                int tmp = (nums[i] & nums[j]);
                map.put(tmp, map.getOrDefault(tmp, 0) + 1);
            }
        }
        for (int num : nums){
            for (int m = 0; m < (1 << 16); m++){
                if ((m & num) == 0){
                    ans += map.getOrDefault(m, 0);
                }
            }
        }
        return ans;
    }
}

复杂度

  • 时间复杂度:image.png
  • 空间复杂度:image.png
  • 优化:枚举的起点
    考完试补
















目录
相关文章
|
17小时前
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
【每日一题Day163】LC2367算术三元组的数目 | 二分查找 哈希表
21 0
|
17小时前
【每日一题Day370】LC318最大单词长度乘积 | 哈希表 位运算
【每日一题Day370】LC318最大单词长度乘积 | 哈希表 位运算
30 1
|
17小时前
|
存储 人工智能 BI
【每日一题Day147】LC1615最大网络秩 | 枚举 哈希表
【每日一题Day147】LC1615最大网络秩 | 枚举 哈希表
32 0
|
17小时前
|
存储
【每日一题Day158】LC2395和相等的子数组 | 哈希表
【每日一题Day158】LC2395和相等的子数组 | 哈希表
18 0
|
17小时前
【每日一题Day205】LC2441与对应负数同时存在的最大正整数 | 哈希表
【每日一题Day205】LC2441与对应负数同时存在的最大正整数 | 哈希表
25 1
|
17小时前
|
机器学习/深度学习
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序
21 0
|
17小时前
|
算法
【每日一题Day229】LC2352相等行列对 | 哈希
【每日一题Day229】LC2352相等行列对 | 哈希
23 0
|
17小时前
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
23 0
|
17小时前
【每日一题Day252】LC1两数之和 | 哈希表
【每日一题Day252】LC1两数之和 | 哈希表
20 0
|
17小时前
|
存储
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
16 0