【算法】位运算| & ^ ~ -n n-1

【算法】位运算| & ^ ~ -n n-1

目录

1.| 

2.&

3.^

3.1相加和位

3.1.1无进位去和

3.1.2进位去和

4.~

5.-n

6.n-1

位图


1.| 

1占侧|1 占1|0 化原同 | 同 为同


2.&

0占侧&0 占0&1 化原同 & 同 为同


3.^

无进位加法^0 和原同 ^ 同 消0

3.1相加和位

化二进制bit位01进位/无进位相加和的位上查

3.1.1无进位去和

260. 只出现一次的数字 III - 力扣(LeetCode)

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。

示例 1:

输入:nums = [1,2,1,3,2,5] 输出:[3,5] 解释:[5, 3] 也是有效的答案。

示例 2:

输入:nums = [-1,0] 输出:[-1,0]

示例 3:

输入:nums = [0,1] 输出:[1,0]

提示:

  • 2 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • 除两个只出现一次的整数外,nums 中的其他数字都出现两次
public int[] singleNumber(int[] nums) { int sum = 0; for (int i : nums) sum ^= i; // sum:两个不同数的^和 int tmp1 = sum & -sum; // a和b不同,肯定有一位比特位为1,tmp1:右首1提纯数 // 各只出现1次的 不同的 两个数 和1位 肯定不同,一个是0 一个是1,各分开在 此位为01的 2组中,其余出现2次的 都各成对分布在两组中 和为0,分开来两组消和 两不同数各出 int[] ret = new int[2]; for (int i : nums) { //if((i & tmp1) == 0) if((i & tmp1) != 0) // 右首1这位 为1的 这组,两个不同数的其中一个 这位是1的 分到这组 ret[0] ^= i; else ret[1] ^= i; // 右首1这位 为0的 这组,两个不同数的其中一个 这位是0的 分到这组 } return ret; }

3.1.2进位去和

137. 只出现一次的数字 || - 力扣(LeetCode)

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

示例 1:

输入:nums = [2,2,3,2] 输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99] 输出:99

提示:

  • 1 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次
public int singleNumber(int[] nums) { int ret = 0; for (int i = 0; i < 32; i++) { int sum = 0; for (int x : nums) if (((x >> i & 1) == 1)) sum++; if(sum % 3 == 1) ret |= 1 << i; }return ret; }

4.~

取反


5.-n

右首1 往左取反, n & -n 右首1纯提


6.n-1

右首1 含右取反n & (n-1) 右首1化0


位图

数变量的二进制槽子存bit01 代 对值

面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = "leetcode" 输出: false

示例 2:

输入: s = "abc" 输出: true

限制:

  • 0 <= len(s) <= 100
  • s[i]仅包含小写字母
  • 如果你不使用额外的数据结构,会很加分。
public boolean isUnique(String astr) { // 鸽巢原理优化: if(astr.length() > 26) return false; int bitMap = 0; // 位图数变量 for (int i = 0; i < astr.length(); i++) { int x = astr.charAt(i) - 'a'; // 判断字符是否已存在位图中: if(((bitMap >> x) & 1) == 1) return false; // 把此字符在位图中标记存在: bitMap |= (1 << x); } return true; }

Read more

哈希的介绍

哈希的介绍

1. unordered系列关联式容器     下面来看哈希,首先看关联式容器unorder_map和unorder_set,它们底层是哈希表,用法和map set一样。下面浅浅过一下,它是单向迭代器,因为没有rbegin和rend。也就是红黑树和哈希表实现的map和set用法几乎相同,区别是:1.unorder系列是单向迭代器。2.unorder系列遍历出来不是有序的。下面演示一下: 它只能去重,不能排序,它也是有multi版本的。再演示一下unorder_map: 2.哈希     下面正式看哈希,什么是哈希呢?我们以前遇到的搜索有这样几类:首先是暴力查找,在一个数组里都查,这样非常慢。于是有人衍生出了有序数组的二分查找,但它的前提是排序,而且增删查改不方便,过程中为了保证有序会涉及大量的数据挪动。因此衍生出了平衡搜索树,此时基础上又出现了新的搜索,这种搜索叫哈希(散列)。它的本质是存储的值跟存储位置建立出一个映射关系,什么意思呢,先来看一个计数排序的样例: 有上面这样的一组值,最小的值是15,最大的值是30,总共开了16个空间。然后存映射关系(次数),15映射第一个位

By Ne0inhk
【Java】从树形结构到二叉树:一篇搞懂数据结构里的“家族树”

【Java】从树形结构到二叉树:一篇搞懂数据结构里的“家族树”

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:Java.数据结构 【前言】 你有没有想过,电脑里的文件分类、通讯录的层级关系,其实都藏着“树”的影子?树形结构是数据结构里最像“现实家族关系”的存在,而二叉树更是其中的“明星选手”——它规则清晰、操作灵活,是很多复杂数据处理的基础。这篇文章会从树形结构的概念入手,一步步拆解二叉树的类型、性质、存储和操作,帮你把这些抽象的结构变成能上手用的知识~ 文章目录: * 一、树形结构 * 1.树形结构的概念 * 2.树的表示形式 * 二、二叉树 * 1.概念 * 2.二叉树类型 * 2.1 满二叉树 * 2.2 完全二叉树 * 3.

By Ne0inhk

Sonic表情生成算法基于何种神经网络?Transformer+CNN混合

Sonic表情生成算法的神经网络架构解析:Transformer与CNN的协同之道 在虚拟数字人技术加速落地的今天,如何以极低成本生成高保真、自然流畅的说话视频,成为各大科技公司和内容平台竞相突破的关键命题。传统依赖3D建模与动作捕捉的工作流不仅成本高昂,且制作周期长,难以适应短视频时代“快、准、稳”的内容生产节奏。正是在这一背景下,腾讯联合浙江大学推出的Sonic模型应运而生——它仅需一张静态人像与一段音频,即可端到端生成唇形精准同步、表情细腻自然的数字人视频。 其背后的技术核心,并非单一的深度学习结构,而是Transformer与CNN的混合架构设计。这种组合并非简单拼接,而是基于对语音时序特性和人脸空间结构的深刻理解,实现了跨模态生成中的“各司其职、高效协同”。 用Transformer捕捉声音的时间韵律 语音本质上是一种高度结构化的时间序列信号。不同的音素(如/p/、/m/、/a/)对应特定的嘴型变化,而这些变化又受到上下文语境的影响——比如“sp”中的/p/发音比单独念/p/更轻更快。要准确还原这种动态过程,模型必须具备强大的长程依赖建模能力。 早期方法多采用LS

By Ne0inhk
力扣校招算法通关:双指针技巧全场景拆解 —— 从数组操作到环检测的高效解题范式

力扣校招算法通关:双指针技巧全场景拆解 —— 从数组操作到环检测的高效解题范式

文章目录 * 前言 * 双指针 * 例题讲解 * 移动零 力扣 * 复写零 力扣 * 快乐数 力扣 * 盛最多水的容器 力扣 * 有效三角形的个数 力扣 * 查找总价格为目标值的两个商品 力扣 * 三数之和 力扣 前言 在力扣校招算法题中,双指针技巧是一类高频且实用的解题方法。它并非真正的 “指针”,而是通过两个数组下标(或迭代器)的协同移动,在数组划分、区间求解、环检测等场景中实现高效遍历与逻辑处理,往往能将时间复杂度从暴力法的 O(n平方)优化至O(n),是校招笔试和面试中突破数组类难题的关键武器。 本专栏将围绕力扣校招高频的双指针题型展开,从 “移动零”“复写零” 的数组操作,到 “快乐数” 的环检测、“盛最多水的容器” 的区间优化,再到 “三数之和” 的多指针协同,逐一拆解双指针的核心逻辑、边界处理与去重技巧,

By Ne0inhk