初识算法 · 位运算(2)

目录

前言:

判定字符是否唯一

丢失的数字

比特位计数

只出现一次的数字III


前言:

​本文的主题是位运算,通过四道题目讲解,一道是判断字符是否唯一,一道是只出现一次的数字III,一道是比特位计数,一道是丢失的数字。
链接分别为:

338. 比特位计数 - 力扣(LeetCode) 面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)

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

因为这些题目都是比较简单的,所以一一揉在一起介绍。

那么,话不多说,直接进行主题咯。


判定字符是否唯一

这道题目是作为面试题目出现的,作为一道面试题目,它有很多解法,比如我们可以使用哈希映射,使用map 使用set,使用函数count就可以判断是否出现了两次,也可以使用数组,遍历一遍,看哪个下标对应的值是2就返回false即可,解法是非常非常多的,说白了,这道题目就是让我们判读这堆“数字”里面是否有重复的数字。

那么前两个方法,多多少少都用到了额外的数据结构,额外的空间,相对来说还是没有那么好,毕竟空间还是大了一点,我们不妨利用位图的思想,一个Int就可以搞定,遍历到的时候,将位图对应的位置置为1,再次如果判断到了,直接返回false即可。

当然了,这道题目可以使用鸽巢原理进行优化,一共才26个英文字符,如果字符串的长度超过了26,直接返回false即可。

以上是题目解析 + 算法原理,以下是原理编写:

class Solution 
{
public:bool isUnique(string astr) {int bitmap = 0;for(auto e : astr){int x = e - 'a';if(((bitmap >> x) & 1) == 1) return false;else bitmap |= (1 << x);}    return true;}
};

丢失的数字

题目十分简单,我们现在应该思考的是,我们可以用多少种解法,这道题目无非就是让我们从一个连续的数集里面找到缺失的数字就可以了。“那这道题不就是缺失的数字吗”

第一种解法,高斯求和,因为数字肯定是从0开始到n的,所以我们可以将0到n这段区间的所有的数字加起来,最后减去给我们的这段区间的和即可。时间复杂度为O(N) 空间复杂度为O(1)

第二种解法,哈希映射,我们就开一个n + 1的数组,遍历数组,对应下标+1,看谁为2即可。时间复杂度为O(N) 空间复杂度为O(N),相对来说就不是那么好了。

第三种解法,遍历数组看i + 1是否为前一个数 + 1即可。

第四种解法,异或的运算律,数组的下标和数异或,看谁空出来了就可以了。

class Solution {
public:int missingNumber(vector<int>& nums) {        sort(nums.begin(),nums.end());if(nums[0] != 0) return 0;int i = 0;for(i = 0; i < nums.size() - 1; i++){if(nums[i] != (nums[i + 1] - 1)) return nums[i] + 1;}    return nums[i] + 1;}
};

对于第三种解法是比较差劲的,因为还是注意许多细节问题,比如需要先排序,还要判断1 2的这种情况,那么对于异或来说,就很不错了:

class Solution 
{
public:int missingNumber(vector<int>& nums) {int ret = 0;for(auto e : nums) ret ^= e;for(int i = 1;i <= nums.size();i++)ret ^= i;return ret;}
};

比特位计数

题目的要求是计算从0到n的所有的数中的二进制表示中1的个数,将个数插入到顺序表,然后返回就可以了。

那这道题不就是多次计算比特位中1的个数吗?我们甚至可以直接复用上篇那道题目的代码:

class Solution 
{
public:int countone(int n){int x = 0;while(n){n &= (n - 1);x++;}return x;}vector<int> countBits(int n) {vector<int> v;for(int i = 0; i <= n; i++){v.push_back(countone(i));}return v;}
};

只出现一次的数字III

这道题目无非就是找单身狗plus版本而已,就是缺失的数字嘛对吧!

我们需要找到两个数,那么异或整个数组肯定是少不了的,异或了之后,剩余的是两个数的异或结果,那么我们如何分离出来呢?

我们可以结合基本题目 :提取最低位的1,提取出来之后,两个只出现一次的数字在该位上一定是不同的,因为异或出来结果是1,其他的数也异或掉了,所以一定是一个为1,一个为0。

那么我们利用这个特点,将数组中的每个数组和最低位的数字一&运算一下,就可以得到结果了,因为没有要求顺序,所以我们可以直接输出。

class Solution 
{
public:vector<int> singleNumber(vector<int>& nums) {//先将整个数组异或int ret = 0;for(auto e : nums) ret ^= e;//获取最低位的1->实际上是分组// int low_bit = ret & -ret;int low_bit = (ret == INT_MIN ? ret : ret & (-ret));//开始分组int ans1 = 0, ans2 = 0;for(auto e : nums){if(e & low_bit) ans1 ^= e;else ans2 ^= e;}return { ans1, ans2 };}
};

以上就是位运算的多个题目解析。


感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Assembly Definition Assembly Definition Reference

文章目录 1.Unity 预定义程序集2.Assembly definition3. Assembly definitions相关实验 1.Unity 预定义程序集 Unity 有4个预定义程序集&#xff1a; 阶段程序集名脚本文件1Assembly-CSharp-firstpassStandard Assets, Pro Standard Assets和Plugins文件夹下面的运行时脚本2A…

【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)

#华南理工大学主办&#xff01;#IEEE出版&#xff01;EI稳定检索&#xff01;#组委阵容强大&#xff01;IEEE Fellow、国家杰青等学术大咖领衔出席&#xff01;#会议设置“优秀论文”“优秀青年学者报告”“优秀海报”等评优奖项 2024智能机器人与自动控制国际学术会议 &#…

[CKS] Create/Read/Mount a Secret in K8S

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[C…

5个非LLM软件趋势

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

社会工程骗局席卷金融机构

2024 年北美金融机构收到的社交工程诈骗报告数量比一年前增加了 10 倍。数据显示&#xff0c;诈骗现在占所有数字银行欺诈的 23%。 深度伪造和 GenAI 诈骗的危险日益增加 BioCatch 在其 2024 年北美数字银行欺诈趋势报告中公布了这些发现&#xff0c;该报告还详细说明了报告的…

读数据质量管理:数据可靠性与数据质量问题解决之道03数据目录

1. 同步数据 1.1. 不同的数据仓库和数据湖通过数据集成层来进行桥接 1.2. AWS Glue、Fivetran和Matillion等数据集成工具从不同来源收集数据&#xff0c;统一这些数据&#xff0c;并将其转换为上游来源 1.3. 数据集成的一个典型用例是收集数据湖的数据并以结构化格式将其加载…

【数据库】数据库迁移的注意事项有哪些?

数据库迁移是一个复杂且关键的过程&#xff0c;需要谨慎处理以确保数据的完整性和应用程序的正常运行。以下是一些数据库迁移时需要注意的事项&#xff1a; 1. 充分的前期准备 1.1 评估迁移需求 明确目标&#xff1a;确定迁移的具体目标&#xff0c;例如添加新字段、修改现…

LabVIEW开发相机与显微镜自动对焦功能

自动对焦是显微成像系统中的关键功能&#xff0c;通常由显微镜的电动调焦模块或特定的镜头系统提供&#xff0c;而工业相机则主要用于高分辨率图像的采集&#xff0c;不具备独立的自动对焦功能。以下是自动对焦的工作原理、实现方式及实际应用案例。 1. 自动对焦的工作原理 &a…

ReactPress与WordPress:两大开源发布平台的对比与选择

ReactPress与WordPress&#xff1a;两大开源发布平台的对比与选择 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为各类网站和应用的核心组成部分。两款备受欢迎的开源发布平台——ReactPress和WordPress&#xff0c;各自拥有独特的优势和特点&am…

京东商品详情,Python爬虫的“闪电战”

在这个数字化的时代&#xff0c;我们每天都在和数据打交道&#xff0c;尤其是电商数据。想象一下&#xff0c;你是一名侦探&#xff0c;需要快速获取京东上某个商品的详细信息&#xff0c;但是没有超能力&#xff0c;怎么办&#xff1f;别担心&#xff0c;Python爬虫来帮忙&…

np.zeros_like奇怪的bug

import numpy as np aa np.array([[1,2,3],[2,3,3]]) cc np.random.randn(2,3) print(aa) print(cc)bb np.zeros_like(aa) print(bb)for i in range(bb.shape[0]):for j in range(bb.shape[1]):bb[i,j] cc[i,j]print(bb)结果如下 这里发现这个bb的结果是没有赋值的 正确做…

【时间之外】IT人求职和创业应知【34】-人和机器人,机器人更可靠

目录 新闻一&#xff1a;人形机器人产业持续高速增长&#xff0c;2026年中国市场规模将突破200亿元 新闻二&#xff1a;AI技术驱动设备厂商格局变化&#xff0c;部分厂商市占率快速提升 新闻三&#xff1a;华为与江淮汽车携手打造超高端品牌“尊界”&#xff0c;计划于明年春…

连接实验室服务器并创建虚拟环境,从本地上传文件到linux服务器,使用requirement.txt安装环境需要的依赖的方法及下载缓慢的解决方法(Linux)

文章目录 一、连接实验室服务器并创建虚拟环境二、从本地上传文件到linux服务器三、使用requirement.txt安装环境需要的依赖的方法及下载缓慢的解决方法(Linux)四、查看虚拟环境中安装包位置五、Linux scp命令复制文件报错&#xff1a; not a regular file六、pycharm远程ssh连…

WebSocket和HTTP协议的性能比较与选择

WebSocket和HTTP协议的性能比较与选择 引言&#xff1a; 在web应用开发中&#xff0c;无论是实时聊天应用、多人在线游戏还是实时数据传输&#xff0c;网络连接的稳定性和传输效率都是关键要素之一。目前&#xff0c;WebSocket和HTTP是两种常用的网络传输协议&#xff0c;它们…

Prompt Engineering 提示工程

一、什么是提示工程&#xff08;Prompt Engineering&#xff09; Prompt 就是发给大模型的指令&#xff0c;比如讲个笑话、用 Python 编个贪吃蛇游戏等&#xff1b;大模型只接受一种输入&#xff0c;那就是 prompt。本质上&#xff0c;所有大模型相关的工程工作&#xff0c;都是…

智慧水利综合解决方案

1. 引言 智慧水利综合解决方案集成了先进的信息技术与水利专业知识&#xff0c;旨在提升水资源管理与防洪减灾能力&#xff0c;实现水利管理的智能化与高效化。 2. 数字孪生技术 方案利用数字孪生技术构建流域数字模型&#xff0c;通过高精度模拟仿真&#xff0c;为水资源调度…

网络安全工程师要考什么证书

在当今数字化时代&#xff0c;网络安全已成为各行各业不可忽视的重要领域。随着网络攻击手段的不断升级&#xff0c;企业对网络安全人才的需求也日益迫切。网络安全工程师作为这一领域的专业人才&#xff0c;承担着保护企业信息安全、防范网络威胁的重要职责。那么&#xff0c;…

Python在数据科学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Python在数据科学中的应用 Python在数据科学中的应用 Python在数据科学中的应用 引言 Python 概述 定义与特点 发展历程 Python…

机器学习:决策树——ID3算法、C4.5算法、CART算法

决策树是一种常用于分类和回归问题的机器学习模型。它通过一系列的“决策”来对数据进行分类或预测。在决策树中&#xff0c;每个内部节点表示一个特征的测试&#xff0c;每个分支代表特征测试的结果&#xff0c;而每个叶节点则表示分类结果或回归值。 决策树工作原理 根节点&…

大数据-221 离线数仓 - 数仓 数据集市 建模方法 数仓分层 ODS DW ADS

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…