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

按位与为零的三元组[掩码+异或的作用]

掩码+异或的作用

  • 前言
  • 一、按位与为零的三元组
  • 二、统计分组
    • 1、map统计分组
    • 2、异或+掩码
  • 总结
  • 参考资料

前言

当a + b = 0时,我们能够很清楚的知道b是个什么值,b = 0 - a = -a,如果当a & b = 0时,我们能够很清楚的知道b是什么值吗?

一、按位与为零的三元组

在这里插入图片描述

二、统计分组

1、map统计分组

像这种组合题,纯靠for循环遍历出来的都会超时,一般用map/切片统计,通过乘法/加法,快速组合,或者说抽象的方式组合,只在乎组合的次数,不在乎具体的组合情况。
方法:先两层for循环,进行统计两数与完之后的分组情况,再来两层for循环,来寻找分组数据和第3个数与的情况。

func countTriplets(nums []int) int {// 分组cnt := map[int]int{}for i := 0;i < len(nums);i++ {for j := 0;j < len(nums);j++ {cnt[nums[i] & nums[j]]++}}// 计数ans := 0for k,v := range cnt {if k == 0 {ans += v * len(nums)continue}for _,n := range nums {if n & k == 0 {ans += v}}}return ans
}

2、异或+掩码

上面的解法只是进行了简单的分组,但是并未利用到与操作的特性,我们可以仔细分析与操作的特性,看能不能将第二个双层for循环变成单层for循环。

与操作为0,说明了三个数的每一位,必定有一个0及以上。
假设第一个双层for循环得到了一些数,这些数要和nums再组合一次,当前者的任意一位为1时,后者必须是0,当前者的任意一位为0时,后者可0可1。

可0可1?那怎么记录前者的“相反数”啊?
将一个值整成多份,每份将一个0变1,并记录这种数有一个,这样就不管匹配的什么可0可1了。
我们需要记录所谓的相反数,可通过掩码+异或的方式,来将0变1,1变0,再不断组合1的情况,并记录这些相反数的个数。

func countTriplets(nums []int) int {// 分组统计cnt := make([]int,1 << 16)cnt[0] = len(nums)const MAX = 1 << 16 - 1for i := 0;i < len(nums);i++ {mask := nums[i] ^ MAXfor j := mask;j > 0;j = (j - 1) & mask {cnt[j]++}}// 计数ans := 0for _,a := range nums {for _,b := range nums {ans += cnt[a & b] // 刚好01互补,mask+异或是个好东西}}return ans
}

总结

1)困难题都是各种组件组合而成,所以训练好各种问题的解决方式,再分析困难题的组合情况,就能快速解答困难题。
2)异或的作用蛮大的,配合掩码能将一个数的所有二进制取反。

参考资料

[1] LeetCode 按位与为零的三元组

相关文章:

按位与为零的三元组[掩码+异或的作用]

掩码异或的作用前言一、按位与为零的三元组二、统计分组1、map统计分组2、异或掩码总结参考资料前言 当a b 0时&#xff0c;我们能够很清楚的知道b是个什么值&#xff0c;b 0 - a -a&#xff0c;如果当a & b 0时&#xff0c;我们能够很清楚的知道b是什么值吗&#xf…...

C++基础篇(一)-- 简单入门

C 语言是在优化 C 语言的基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言。在后来的持续研究中&#xff0c;C 增加了许多新概念&#xff0c;例如虚函数、重载、继承、标准模板库、异常处理、命名空间等。 C 语言的特点主要表现在两个方面&#xff1a;全面兼…...

前端整理 —— javascript 2

1. generator&#xff08;生成器&#xff09; 详细介绍 generator 介绍 generator 是 ES6 提供的一种异步编程解决方案&#xff0c;在语法上&#xff0c;可以把它理解为一个状态机&#xff0c;内部封装了多种状态。执行generator&#xff0c;会生成返回一个遍历器对象。返回的…...

Spring-注解注入

一、回顾XML注解 bean 配置 创建 bean public class Student { } 配置 xml bean <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSche…...

华为校招机试 - 攻城战(Java JS Python)

目录 题目描述 输入描述 输出描述 用例 题目解析 JavaScript算法源码 Java算法源码...

Docker入门

Docker一、何为DockerDocker是一个开源的应用容器引擎&#xff0c;基于GO语言并遵循从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后在发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使…...

时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)

时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序) 目录 时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)预测结果模型输出基本介绍完整程序参考资料预测结果 模型输出 layers = 具有以下层的 151 Layer 数组:...

【蒸滴C】C语言结构体入门?看这一篇就够了

目录 一、结构体的定义 二、结构的声明 例子 三、 结构成员的类型 结构体变量的定义和初始化 1.声明类型的同时定义变量p1 2.直接定义结构体变量p2 3.初始化&#xff1a;定义变量的同时赋初值。 4.结构体变量的定义放在结构体的声明之后 5.结构体嵌套初始化 6.结构体…...

第十三届蓝桥杯

这里写目录标题一、刷题统计&#xff08;ceil函数返回的是等值于某最小整数的浮点值&#xff0c;不强制转换回int就wa&#xff0c;没错就连和int整数相加都wa二、修剪灌木&#xff08;主要应看清楚会调转方向三、统计子矩阵&#xff08;前缀和滑动窗口⭐&#xff09;四、[积木画…...

消息队列mq

应用场景&#xff1a; 1、解耦 2、削峰填谷 3、异步处理 4、消息通讯 工作模式&#xff1a; 一个消息只能被消费一次&#xff08;订阅模式除外&#xff09;&#xff0c;消费者接受到消息会回调业务逻辑&#xff0c;消费逻辑写在回调函数里面。 1、简单模式&#xff1a;一个生产…...

[学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

文章目录视频资料&#xff1a;一、Spark基础入门&#xff08;环境搭建、入门概念&#xff09;第二章&#xff1a;Spark环境搭建-Local2.1 课程服务器环境2.2 Local模式基本原理2.3 安装包下载2.4 Spark Local模式部署第三章&#xff1a;Spark环境搭建-StandAlone3.1 StandAlone…...

git push和 git pull的使用

git push与git pull是一对推送/拉取分支的git命令。git push 使用本地的对应分支来更新对应的远程分支。$ git push <远程主机名> <本地分支名>:<远程分支名>*注意: 命令中的本地分支是指将要被推送到远端的分支&#xff0c;而远程分支是指推送的目标分支&am…...

首发,pm3包,一个用于多组(3组)倾向评分匹配的R包

目前&#xff0c;本人写的第二个R包pm3包已经正式在CRAN上线&#xff0c;用于3组倾向评分匹配&#xff0c;只能3组不能多也不能少。 可以使用以下代码安装 install.packages("pm3")什么是倾向性评分匹配&#xff1f;倾向评分匹配&#xff08;Propensity Score Match…...

基于Canal的数据同步

基于Canal的数据同步 一、 系统结构 该数据同步系统由Spring Boot和Canal共同组成。 Spring Boot 是一个流行的 Java Web 框架&#xff0c;而 Canal 则是阿里巴巴开源的 MySQL 数据库的数据变更监听框架。结合 Spring Boot 和 Canal&#xff0c;可以实现 MySQL 数据库的实时数…...

vuetify设置页面默认主题色

前言 最近工作中接到一个任务&#xff1a; 项目中分light和dark两种主题色a、b页面默认为dark其他页面默认为light 项目前端环境&#xff1a; vue2jsyarnvuexvuetifyelement ui 解决思路 routerjs中配置路径时进行默认主题设置 在左侧aside点击菜单时&#xff0c;进行主题切…...

【Python入门第二十三天】Python 继承

Python 继承 继承允许我们定义继承另一个类的所有方法和属性的类。 父类是继承的类&#xff0c;也称为基类。 子类是从另一个类继承的类&#xff0c;也称为派生类。 创建父类 任何类都可以是父类&#xff0c;因此语法与创建任何其他类相同&#xff1a; 实例 创建一个名为…...

C#中,读取一个或多个文件内容的方法

读取一个或多个文件内容的方法 在C#中&#xff0c;可以使用File.ReadAllLines方法一次读取多个文件中的所有行内容。例如&#xff0c;以下代码读取了两个文件中的所有行内容&#xff0c;然后将它们合并在一起&#xff1a; string[] file1Lines File.ReadAllLines("file1…...

1 基于神经辐射场(neural Radiance Fileds, Nerf)的三维重建- 简介

Nerf简介 Nerf&#xff08;neural Radiance Fileds&#xff09; 为2020年ICCV上提出的一个基于隐式表达的三维重建方法&#xff0c;使用2D的 Posed Imageds 来生成&#xff08;表达&#xff09;复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域&#xff0c;也…...

水果FLStudio21.0.0中文版全能数字音乐工作站DAW

FL Studio 21.0.0官方中文版重磅发布纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01;Mac版新增对苹果M2/1家族芯片原生支持。编曲、剪辑、录音、混音&#xff0c;20余年的技术积淀和实力研发&#xff0c;FL Studio 已经从电音…...

【GlobalMapper精品教程】055:GM坐标转换器的巧妙使用

GM软件提供了一个简单实用的坐标转换工具,可以实现地理坐标和投影坐标之间的高斯正反算及多种转换计算。 文章目录 一、坐标转换器认识二、坐标转换案例1. 地理坐标←→地理坐标2. 地理坐标←→投影坐标三、在输出坐标上创建新的点四、其他转换工具的使用一、坐标转换器认识 …...

OpenClaw多模型切换指南:Qwen3-32B与其他镜像协同工作

OpenClaw多模型切换指南&#xff1a;Qwen3-32B与其他镜像协同工作 1. 为什么需要多模型切换&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理公司周报时&#xff0c;发现单一模型很难同时满足"数据分析"和"文案润色"两种需求。Qwen…...

OpenClaw技能扩展实战:基于Qwen3-32B开发自定义文件处理器

OpenClaw技能扩展实战&#xff1a;基于Qwen3-32B开发自定义文件处理器 1. 为什么需要自定义文件处理器 上周处理季度数据时&#xff0c;我又遇到了那个老问题&#xff1a;手头有37个CSV文件需要清洗格式、去重合并&#xff0c;还要按日期归档。这种重复性工作既耗时又容易出错…...

快速找回Chrome密码:ChromePass终极使用指南

快速找回Chrome密码&#xff1a;ChromePass终极使用指南 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾经因为忘记Chrome浏览器中保存的重要登录密码而感到困扰&#…...

Anthropic调整Claude使用限制以缓解高峰时段需求压力

Anthropic公司周三调整了Claude客户的使用限制策略&#xff0c;在高峰需求时段降低服务功率&#xff0c;以平衡用户需求与其服务交付能力。Anthropic技术团队成员Thariq Shihipar在社交媒体上发布消息称&#xff1a;"为了管理Claude日益增长的需求&#xff0c;我们正在调整…...

你用AI写代码时,是不是总觉得“它懂语法,却搞不定真实工程”?Composer 2的答案在这里

很多开发者都有过这种体验&#xff1a;把一个真实项目需求甩给AI&#xff0c;它能秒出语法完美的代码片段&#xff0c;可一到大型代码库、遗留系统、多文件联动的时候&#xff0c;就开始原地打转。改了半天核心逻辑没动&#xff0c;引入新问题&#xff0c;或者干脆在长链条任务…...

别再手动拖拽了!用Mermaid语法+draw.io,5分钟搞定系统设计流程图

从文本到图表&#xff1a;Mermaid与draw.io的高效设计工作流革命 每次系统设计会议后&#xff0c;你是否也经历过这样的场景&#xff1a;白板上密密麻麻的逻辑草图需要转化为电子版&#xff0c;而传统拖拽式绘图工具让你在调整箭头和对齐方框上耗费半小时&#xff1f;作为经历…...

5个维度掌握wechat-api:从入门到生产的微信机器人开发指南

5个维度掌握wechat-api&#xff1a;从入门到生产的微信机器人开发指南 【免费下载链接】wechat-api &#x1f5ef; wechat-api by java7. 项目地址: https://gitcode.com/gh_mirrors/we/wechat-api 核心价值&#xff1a;企业为什么需要微信机器人&#xff1f; 在数字化…...

IntelliJ IDEA突然无法启动的快速修复指南

1. IntelliJ IDEA突然无法启动的常见原因 作为一名常年与IntelliJ IDEA打交道的开发者&#xff0c;我遇到过无数次IDE突然罢工的情况。最让人头疼的是&#xff0c;明明昨天还用得好好的&#xff0c;今天双击图标却毫无反应。这种情况通常由以下几个原因导致&#xff1a; 首先是…...

Kettle错误处理实战:如何用表输出步骤捕获并存储ETL过程中的异常数据

Kettle错误处理实战&#xff1a;如何用表输出步骤捕获并存储ETL过程中的异常数据 在数据仓库和ETL&#xff08;Extract, Transform, Load&#xff09;流程中&#xff0c;错误处理是确保数据质量的关键环节。Kettle&#xff08;现称Pentaho Data Integration&#xff09;作为一款…...

Spring Boot项目SQL执行监控实战:手把手集成P6spy,自定义日志格式并输出到文件

Spring Boot生产环境SQL监控全方案&#xff1a;P6spy高阶配置与日志持久化实战 当你负责的电商系统在促销活动期间突然出现响应迟缓&#xff0c;或是金融交易系统在月末结算时频繁超时&#xff0c;数据库查询性能往往是首要怀疑对象。但生产环境的数据库通常不允许直接连接进行…...