Leetcode: 982. Triples with Bitwise AND Equal To Zero
时间:2020-07-09
本文章向大家介绍Leetcode: 982. Triples with Bitwise AND Equal To Zero,主要包括Leetcode: 982. Triples with Bitwise AND Equal To Zero使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Description
Given an array of integers A, find the number of triples of indices (i, j, k) such that:
0 <= i < A.length
0 <= j < A.length
0 <= k < A.length
A[i] & A[j] & A[k] == 0, where & represents the bitwise-AND operator.
Example
Input: [2,1,3]
Output: 12
Explanation: We could choose the following i, j, k triples:
(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
Note
1 <= A.length <= 1000
0 <= A[i] < 2^16
分析
之前想过用 bit 位分类,但是总有遗漏的情况无法计算~
class Solution(object):
def _do(self, N):
m = len('{0:b}'.format(max(N)))
ssum, total = 0, len(N)**3
dp = []
def rr(n, h, i):
if i > 16 or len(n) == 0 or len(h) == 0:
return 0
v = 1 << (i-1)
l1 = sum([1 for j in n if j & v != 0])
l2 = sum([1 for j in h if j & v != 0])
if l1*l2 == 0:
return rr(n, h, i+1)
return (l1+l2)**3 -l1**3 -l2**3 + rr(n, [j for j in h if j & v == 0] , i+1) + rr([j for j in n if j &v ==0], h , i+1)
for i in range(1, m+1):
v = 1 << (i-1)
has, noth = [], []
for j in N:
if j & v != 0:
has.append(j)
else:
noth.append(j)
t = rr(has, [j for j in dp], i)
ssum += len(has)**3 + t
print(dp, has, t)
N = noth
dp += has
为了节省时间,结果写的贼复杂。还出错了~
code
class Solution(object):
def countTriplets(self, N):
"""
:type A: List[int]
:rtype: int
"""
L = len(N)
m = max(N)
dp = [0 for _ in range(m+1)]
for i in range(L):
for j in range(L):
dp[N[i]&N[j]] += 1
ssum = 0
for j in range(len(dp)):
if dp[j] == 0:
continue
for i in range(L):
if N[i] & j == 0:
ssum += dp[j]
return ssum
总结
Runtime: 3976 ms, faster than 61.54% of Python online submissions for Triples with Bitwise AND Equal To Zero.
Memory Usage: 15.5 MB, less than 100.00% of Python online submissions for Triples with Bitwise AND Equal To Zero.
- 之前一直在寻找有效的优化方法,但是自己思考的方法总有遗漏~
- 本题可以推广到 n 个数的 &, + 等等问题,只要先计算 2 个数的问题,依次循环。这样就等于是 log2 的降维,和快速幂有点类似
原文地址:https://www.cnblogs.com/tmortred/p/13275455.html
- Hbase常用Shell命令
- 对缓存的思考【续】——编写高速缓存友好代码
- 前端AES的加密和解密
- Reverse Linked List II
- python爬虫(六)_urllib2:handle处理器和自定义opener
- Hbase多版本的读写(Shell&Java API版)
- 总结---3
- Mac系统实现git命令自动补全
- [大数据之Yarn]——资源调度浅学
- Mac系统的终端显示git当前分支
- 不掌握这几个人工智能编程语言怎么能说懂AI
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
- 大数据之Yarn——Capacity调度器概念以及配置
- 移动端web开发,click touch tap区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter开发笔记——BottomNavigationBar设置未选择Item颜色
- 访问虚拟机局域网服务拒绝连接
- uninstalling vim-minimal 同时也卸载了 sudo 解决方法
- 大点干!早点散----------深入剖析缓存加速--squid(反向代理与ACL访问控制以及sarg日志)
- JVM的Xms和Xmx参数设置为相同值有什么好处?
- 【CVPR 2020】一种新的门控通道注意力转换单元
- 5个好用的 CSS 函数
- java1.8中Object类源码分析
- 多线程基础(六):Object的wait方法以及notify与notifyAll的区别
- Day15:反转链表
- Day16:合并两个排序的链表
- 大厂面试爱问的「调度算法」,20 张图一举拿下
- Day17:树的子结构
- 多线程基础(七):关于HotSpot中notify方法不具备随机性的证明
- Day18:二叉树的镜像