当前位置: 首页 > news >正文

2023-3-4 刷题情况

按位与为零的三元组

题目描述

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

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

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

样例

样例输入

nums = [2,1,3]
nums = [0,0,0]

样例输出

12
解释:可以选出如下 i, j, k 三元组:
(i=0, j=0, k=1) : 2 & 2 & 1
(i=0, j=1, k=0) : 2 & 1 & 2
(i=0, j=1, k=1) : 2 & 1 & 1
(i=0, j=1, k=2) : 2 & 1 & 3
(i=0, j=2, k=1) : 2 & 3 & 1
(i=1, j=0, k=0) : 1 & 2 & 2
(i=1, j=0, k=1) : 1 & 2 & 1
(i=1, j=0, k=2) : 1 & 2 & 3
(i=1, j=1, k=0) : 1 & 1 & 2
(i=1, j=2, k=0) : 1 & 3 & 2
(i=2, j=0, k=1) : 3 & 2 & 1
(i=2, j=1, k=0) : 3 & 1 & 2

27

提示

  • 1<=nums.length<=10001 <= nums.length <= 10001<=nums.length<=1000
  • 0<=nums[i]<2160 <= nums[i] < 2^160<=nums[i]<216

思路

数据范围不大, 但肯定不能纯暴力的枚举三元组,但可以类似使用两数之和的优化技巧,优化时间复杂度。就感觉很微妙。不知如何形容。

代码实现

// 这次代码好有意思,写的和python似的。
class Solution {public int countTriplets(int[] nums) {int[] cnt = new int[1 << 16];for(int x : nums)for(int y : nums)cnt[x & y]++;int ans = 0;for(int x : nums)for(int y = 0; y < (1 << 16); y++)// (x & y)一定得加括号if((x & y) == 0) ans += cnt[y];return ans;}
}
http://www.lryc.cn/news/29080.html

相关文章:

  • 前端面试总结
  • Geospatial Data Science (6): Spatial clustering
  • 蚁群算法优化问题
  • 为啥一个 main 方法就能启动项目
  • 洛谷:P1554 梦中的统计 JAVA
  • C++初学笔记整理
  • 记录--在Vue3这样子写页面更快更高效
  • 【程序设计与算法(三)】测验和作业题部分答案汇总(面向对象篇)
  • LeetCode 349. 两个数组的交集和 692. 前K个高频单词
  • SpringCloud的五大组件功能
  • 剑指 Offer II 016. 不含重复字符的最长子字符串
  • HBase读取流程详解
  • Redis学习(一):NoSQL概述
  • ESP32设备驱动-MCP23017并行IO扩展驱动
  • RabbitMQ简介
  • 【项目设计】高并发内存池(五)[释放内存流程及调通]
  • Git标签与版本发布
  • Python面向对象编程
  • 【什么情况会导致 MySQL 索引失效?】
  • Java核心知识点整理之小碎片--每天一点点(坚持呀)--自问自答系列版本
  • js中new Map()的使用方法
  • synchronized从入门到踹门
  • ubuntu-8-安装nfs服务共享目录
  • 算法练习(特辑)设计算法的常用思想
  • 哈希->模拟实现+位图应用
  • 苹果手机想要传输数据到电脑怎么传输呢?
  • Linux 练习四 (目录操作 + 文件操作)
  • 自学大数据第四天~hadoop集群的搭建
  • ULID和UUID
  • java基础面试10题