深度解析算法之位运算
33.常见位运算
1.基础位运算
<< 左移操作符
> >右移操作符号
~取反
&按位与:有0就是0
|按位或:有1就是1
^按位异或:相同为0,不用的话就是1 /无进位相加
0 1 0
0 1 1
0 1 0 按位与结果
0 1 1 按位或结果
0 0 1 按位异或结果
2.给一个数n,确定他的二进制表示中的第x位是0还是1
n: 0 1 1 0 1 0 1 0 0 1
右边是最低位,下标从0开始,这个下标和右移操作对应的
下标为2的数是0,那么我们想让这个数变成最低位的话,那么我们就得让这个数右移2位,就是下标的大小
现在我们想判断我们第x位是不是1,那么我们让这个位上的数按位与1,但是前提我们先得让这个第x位上的数变成最低的位置,所以我们需要将这个数右移x位,那么我们当时要判断的数就跑到最前面了,然后&1,如果结果是1的话,那么就说明这个位置上的数是1,因为我们的1比较特殊,1的二进制只有最低位是1,其余全是0
如果一个数按位与1之后的话,如果是0 的话,那么这一位数就是0,如果是1的话那么这一位上的数就是1
运算符的优先级能加括号就加括号
所以我们这里的代码就是==(n>>x)&1==
3.将一个数n的二进制表示的第x位修改成1
我们先让这一位上的数按位或上1,那么原本这一位是0的,现在0|1得到的就是1了,但是我们得让其他位的数字不变,其他位的数按位或上一个0就行了,按位或的话就是是1就是1,不是1的话就是0,那么过程就是下面的样子,所以我们原本的二进制数按位或上中间的那串数,但是这个数怎么来呢?
我们直接让1左移x位就行了
所以代码就是 n | =(1<<x)
先让1左移x位,然后n或等上这个数就可以让我们x位变成1了
4.将一个数n的二进制表示的第x位修改成0
我们仅需要将x位变成0,那么我们让这一位按位与上一个0就行了
为了保持其他位置不变,其他位置与上一个1就行了
我们先让这个1左移x位,然后将左移完的结果进行取反操作
所以代码就是:
n&=(~(1<<x))
5.位图
本质就是一个哈希表
6.提取一个数(n)二进制表示中最右侧的1
如果一个数是0 1 1 1 0 1 0 1 0 0 0
如果将最低位提取出来的话就变成了0 0 0 0 0 0 0 1 0 0 0
我们直接使用代码n&-n就行了
如果一个数前面加上-号的话那么就是按位取反再+1
比对原来的数,我们可以发现改变的仅仅是左边的区域,这个最右边的1的右边的区域是没有被改变的,而且左边的区域的数字和之前都是相反的
所以-n的操作就是将最右侧的1左边的区域全部变成相反数
然后将原来的数和变负的数进行按位与的操作,那么除了最右侧的1,其他的都变成0
代码:n&-n
7.干掉一个数(n)二进制表示中最右侧的1
就是将一个数二进制数中最右侧的1变成0
代码就是n&(n-1)
我们的一个数经历了n-1之后,我们最右侧的1前面的数字都是保持不变的,将最右侧 的1,右边的区域(包含1)全部变成相反
最后的代码就是n&(n-1)
8.异或(^)运算的运算律
a^o=a
a^a=0
a^ b^ c=a^ (b ^c)
34.判断字符是否唯一
判断字符是否唯一
实现一个算法,确定一个字符串 s
的所有字符是否全都不同。
示例 1:
输入: s
= “leetcode”
输出: false
示例 2:
输入: s
= “abc”
输出: true
限制:
0 <= len(s) <= 100
s[i]
仅包含小写字母- 如果你不使用额外的数据结构,会很加分。
解法一:hash,判断出现的次数,从前往后进行扫描,如果一个数出现的次数大于1的话,那么就说明出现重复的数,那么我们直接返回了false
时间复杂度和空间复杂度都是O(N)
解法二:借助位图的思想
鸽巢原理(抽屉原理)进行优化
class Solution {public:bool isUnique(string astr){//利用鸽巢原理来进行优化if(astr.size()>26) return false;//如果字符串的长度大于26(即超过了字母表中的26个字母),则必定有重复字符。因此可以直接返回false。这是一个基于鸽巢原理的优化:26个字符的字符串最多只能容纳26个不同字符。int bitMap=0;for(auto ch:astr){int i=ch-'a';//定义对应字符的比特位//先判断字符是否已经出现了if(((bitMap>>i)&1)==1) return false;//判断我们位图的第i位是否为1//先让这个位图右移i位到达对应的位置,如果这个数按位与1的结果是1的话,那么就说明这个数已经出现过了,那么我们直接返回fslse就行了//这里的话就说明我们的字符并没有在位图中出现过,那么我们直接将当前字符加入到位图中bitMap |=1<<i;//我们先让1左移i位,因为这个数之前没出现过,所以位置上是0,所以我们直接进行按位或,那么位图上面就会变成1了}//出了循环还没返回的话就说明我们的这个字符串并没有重复的字符return true;}};
如果字符串的长度超过了26的话,肯定存在重复的字符的,所以我们直接return false就行了
35.丢失的数字
题目链接
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
示例 1:
输入: nums = [3,0,1]
输出: 2
解释:n = 3
,因为有 3 个数字,所以所有的数字都在范围 [0,3]
内。2 是丢失的数字,因为它没有出现在 nums
中。
示例 2:
输入: nums = [0,1]
输出: 2
解释:n = 2
,因为有 2 个数字,所以所有的数字都在范围 [0,2]
内。2 是丢失的数字,因为它没有出现在 nums
中。
示例 3:
输入: nums = [9,6,4,2,3,5,7,0,1]
输出: 8
解释:n = 9
,因为有 9 个数字,所以所有的数字都在范围 [0,9]
内。8 是丢失的数字,因为它没有出现在 nums
中。
我们可以利用一个哈希表进行问题对的解决,但是时间复杂度是O(N)的,空间复杂度一样
我们也可以利用高斯求和进行问题解决,时间复杂度是O(N)的,空间复杂度是O(1)
我们这里使用位运算(异或运算的运算律)
我们将所有的数异或到一起,最终的结果就是我们缺失的数
class Solution {public:int missingNumber(vector<int>& nums){int ret=0;for(auto x:nums) ret^=x;//将这个数组进行累异或操作for(int i=0;i<=nums.size();i++) ret^=i;//将数组中的数 异或到一起return ret;}};
36.两整数之和
题目链接
给你两个整数 a
和 b
,不使用 运算符 +
和 -
,计算并返回两整数之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = 2, b = 3
输出: 5
这种题目大概率是使用位运算了
使用异或运算 -无进位相加
异或就是不进行进位的操作,然后进行相加的操作
class Solution {public:int getSum(int a, int b){//进位的结果为0的时候我们就可以获得我们的答案了,我们就停止循环了while(b!=0){int x=a^b;//先算出无进位相加的结果//unsigned是为了避免-1的情况,因为-1的二进制位里面都是1unsigned int carry=(unsigned int)(a&b)<<1;//算出进位//unsigned int处理负数出现的情况a=x;b=carry;}return a;}};
a ^ b
计算无进位相加的结果。(a & b) << 1
计算进位,并将其移动到正确的位置。- 不断进行这个过程,直到没有进位,最终得到加法结果。
37.只出现一次的数字II
题目链接
给你一个整数数组 nums
,除某个元素仅出现 一次 外,其余每个元素都恰出现 **三次 。**请你找出并返回那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。
示例 1:
输入: nums = [2,2,3,2]
输出: 3
示例 2:
输入: nums = [0,1,0,1,0,1,99]
输出: 99
我们是可以使用哈希表进行计数的,可以在表中查找到只出现一次的那个元素
代码如下:
class Solution {public:int singleNumber(vector<int>& nums){/*思路:这个题我有一个思路,利用计数器,先遍历一遍这个数组,然后分别进行计数,如果次数是3的话那么就排除,如果最后遍历完的话次数是2的数那么我们直接返回,*///unordered_map和map的区别:插入、查找、删除操作通常比 map 快,平均时间复杂度为o(1)//对于需要快速查找的场景(例如字典或频次统计),unordered_map 更优。//对于范围查询、按序遍历等操作,map 更适合。//创建一个哈希表进行计数操作unordered_map<int,int>count;//第一个int是这个数//第二个int是这个数出现的次数//遍历数组,对每个数组进行计数操作for(int num:nums){count[num]++;}//遍历哈希表,找到出现次数为1的数字并且进行返回for(auto&entry:count){if(entry.second==1){return entry.first;}}return -1;// 题目保证一定存在结果,所以这里不会到达}};
但是这里的话我们还是使用位运算相关的方法进行解决这个题目
class Solution {public:int singleNumber(vector<int>& nums){int ret = 0; // 用来存储最终的结果for(int i = 0; i < 32; i++) // 依次处理每一位(假设是32位整数){int sum = 0;//遍历数组中的每个数,计算每个数的二进制位中第i位是否为1,然后进行统计for(int x : nums) // 遍历数组中的每一个数if(((x >> i) & 1) == 1) // 检查数字x的第i位是否为1sum++; // 统计当前数组中的所有数字在第i位为1的次数,sum %= 3; // 由于其他数字都是三次出现的,sum % 3取余,剩下1就是我们要找的数字的第i位if(sum == 1) ret |= 1 << i; // 如果第i位出现了1次,则在结果中设置第i位为1}return ret; // 返回结果}};
我们对每一位进行处理,通过循环,在每次判断中,我们就计算我们所有数中第i位出现的次数,因为有的数出现三次,有的出现一次,所以我们就将每次第i位的总和算出来再来进行模3 的操作,判断最后的结果是多少,如果是0的话,那么就证明我们只出现1次的那个数没有这一位
但是如果最后的余数是1的话,那么就说明那个只出现一位的数里面的第i位有这个数
等待循环结束,我们的判断就结束了,我们直接将最后的结果进行返回就行了
38.消失的两个数字
题目链接
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
以任意顺序返回这两个数字均可。
示例 1:
输入:[1]
输出:[2,3]
示例 2:
输入:[2,3]
输出: [1,4]
这个题我们还是利用位运算进行解决
我们将这两个数组看成两个整体,那么题目就可以看成,a和b出现过1次,其他的数字出现过两次,然后找出这个出现一次的数
- 一:将所有的数都异或再一起,tmp最后的结果就是a^ b
- 二:找到tmp中比特位为1的那一位,因为a和b是不一样的,所以结果是绝对不等于0的,相同为0,相异为1
找到第x位为1 的那一位
然后的话我们a和b的第x位一个是0,一个是1
那么我们再将原来的两个数组分成下面的这样子
左边的异或的结果就是a,右边的异或结果就是b了
第三步就是:根据x位的不同,划分为两类异或
class Solution {public:vector<int> missingTwo(vector<int>& nums){//1.将所有的数异或到一起int tmp=0;//存储异或结果for(auto x:nums) tmp^=x;for(int i=1;i<=nums.size()+2;i++) tmp^=i;//这里的数组是包含了缺失的两个数,所以大小会多出2//到这里的话,tmp中存的就是a和b异或的结果了//2.找出a和b中比特位不同的那一位,就是tmp中唯一的那一位int diff=0;while(1){if(((tmp>>diff)&1)==1) break;//说明这一位就是1了else diff++;}//3.根据diff位的不同将所有的数划分为两类来进行异或int a=0,b=0;for(auto x:nums){if(((x>>diff)&1)==1) b^=x;else a^=x;}for(int i=1;i<=nums.size()+2;i++){if(((i>>diff)&1)==1) b^=i;else a^=i;}//那么这两个for循环结束之后,a和中存的就是结果了return {a,b};}};
先将缺少ab的数组和不缺少ab的数组进行异或,最后的结果就是我们的ab异或的值
我们根据a和b中比特位不同的那一位,将缺少ab的数组分成两个组,我们找到比特位不同的那一位的位置diff
然后在缺失ab的数组根据这个diff位分为两组进行异或操作,分别存在a和b中,然后再在不缺少ab的数组中进行分组进行同样的异或操作
最后我们的a和b就能被区分出来了
相关文章:
深度解析算法之位运算
33.常见位运算 1.基础位运算 << 左移操作符 > >右移操作符号 ~取反 &按位与:有0就是0 |按位或:有1就是1 ^按位异或:相同为0,不用的话就是1 /无进位相加 0 1 0 0 1 1 0 1 0 按位与结果 0 1 1 按位或结果 0 0 1 …...
深入探索Qt异步编程--从信号槽到Future
概述 在现代软件开发中,应用程序的响应速度和用户体验是至关重要的。尤其是在图形用户界面(GUI)应用中,长时间运行的任务如果直接在主线程执行会导致界面冻结,严重影响用户体验。 Qt提供了一系列工具和技术来帮助开发者实现异步编程,从而避免这些问题。本文将深入探讨Qt…...
【KWDB 创作者计划】_本地化部署与使用KWDB 深度实践
引言 KWDB 是一款面向 AIoT 场景的分布式多模数据库,由开放原子开源基金会孵化及运营。它能在同一实例同时建立时序库和关系库,融合处理多模数据,具备强大的数据处理能力,可实现千万级设备接入、百万级数据秒级写入、亿级数据秒级…...
基于XC7V690T的在轨抗单粒子翻转系统设计
本文介绍一种基于XC7V690T 的在轨抗单粒子翻转系统架构;其硬件架构主要由XC7V690TSRAM 型FPGA芯片、AX500反熔丝型FPGA 芯片以及多片FLASH 组成;软件架构主要包括AX500反熔丝型FPGA对XC7V690T进行配置管理及监控管理,对XC7V690T进行在轨重构管理,XC7V690T通过调用内部SEMIP核实…...
机器学习 Day13 Boosting集成学习方法: Adaboosting和GBDT
大多数优化算法可以分解为三个主要部分: 模型函数:如何组合特征进行预测(如线性加法) 损失函数:衡量预测与真实值的差距(如交叉熵、平方损失) 优化方法:如何最小化损失函数&#x…...
Floyd算法求解最短路径问题——从零开始的图论讲解(3)
目录 前言 Djikstra算法的缺陷 为什么无法解决负权图 模拟流程 什么是Floyd算法 Floyd算法的核心思想 状态表示 状态转移方程 边界设置 代码实现 逻辑解释 举例说明 Floyd算法的特点 结尾 前言 这是笔者图论系列的第三篇博客 第一篇: 图的概念,图的存储,图的…...
spark和hadoop的区别与联系
区别 1. 数据处理模型 Hadoop:主要依赖 MapReduce 模型,计算分 Map(映射)和 Reduce(归约)两个阶段,中间结果常需写入磁盘,磁盘 I/O 操作频繁,数据处理速度相对受限&#…...
XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘
# 详细点: XML 被设计为传输和存储数据, XML 文档结构包括 XML 声明、 DTD 文档类型定义(可 选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的 信息传输…...
C# .NET如何自动实现依赖注入(DI)
为解决重复性的工作,自动实现依赖注入(DI) 示例代码如下 namespace DialysisSOPSystem.Infrastructure {public static class ServiceCollectionExtensions{/// <summary>/// 批量注入服务/// </summary>/// <param name&qu…...
FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南
本文参考:https://doc.tryfastgpt.ai/docs/development/ 一、背景与技术优势 FastGPT是基于LLM的知识库问答系统,支持自定义数据训练与多模型接入。硅基流动(SiliconFlow)作为AI基础设施平台,提供高性能大模型推理引…...
AI对话高效输入指令攻略(三):使用大忌——“AI味”
免责声明: 1.本文所提供的所有 AI 使用示例及提示词,仅用于学术写作技巧交流与 AI 功能探索测试,无任何唆使或鼓励利用 AI 抄袭作业、学术造假的意图。 2.文章中提及的内容旨在帮助读者提升与 AI 交互的能力,合理运用 AI 辅助学…...
算法 | 成长优化算法(Growth Optimizer,GO)原理,公式,应用,算法改进研究综述,matlab代码
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 成长优化算法 一、算法原理二、核心公式三、应用领域四、算法改进研究五…...
生产环境问题排查:日志分析与性能瓶颈定位(一)
引言 在当今数字化时代,各类应用系统如潮水般涌现,支撑着我们生活和工作的方方面面。从日常使用的电商平台、社交网络,到企业内部复杂的业务系统,它们的稳定运行和高效性能至关重要。而在生产环境中,日志分析与性能瓶…...
go语言的八股文
1.go语言触发异常的场景有哪些 运行时错误 1.空指针解引用:尝试访问一个未初始化的指针指向的内存,会导致程序崩溃并触发异常。 2.数组越界访问:试图访问数组中不存在的索引,比如数组长度为5,却尝试访问索引为10的元素…...
Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取
关于Office系列文件文字内容的提取 本文主要通过接口的方式获取Office文件和PDF、OFD文件的文字内容。适用于需要获取Word、OFD、PDF、PPT等文件内容的提取实现。例如在线文字统计以及论文文字内容的提取。 一、提取Word及WPS文档的文字内容。 支持以下文件格式: …...
组态软件工业化自动领域的可视化配置利器
组态软件是工业自动化领域的可视化配置利器,在工业生产中发挥着至关重要的作用,以下从定义、特点、功能、应用场景、市场现状及发展趋势等方面进行详细介绍: 定义 组态软件,又称组态监控系统软件,是用于数据采集和过程…...
Ansys electronics安装多版本simulink打开s-function冲突解决方法
安装了Ansys Electronics 2022 R1和2024 R1,想通过simplorer和simulink中的S-function进行联合仿真,结果注册表一直是2024 R1,修改方法如下: 1. WINR打开cmd,注意要用管理员权限打开 2. 输入 "D:\ANSYS\AnsysE…...
ubuntu--安装双系统
教程 BIOS设置 启动盘生成和ubuntu安装 boot option #1设置USB为第一启动项 rufus下载 官网: 链接 点击“链接”下面的按钮,即可下载。(注意查看自己的电脑是x64还是x84) 网盘下载: 链接...
快速搭建 Cpolar 内网穿透(Mac 系统)
1、Cpolar快速入门教程(官方) 链接地址:Cpolar 快速入门 2、官方教程详解 本地安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这个是从 git 上拉取的&#x…...
【pytorch】torch.nn.Unfold操作
说明 一个代码里涉及到了unfold的操作,看了半天官网都没整明白维度怎么变化的,参考这个链接搞明白了: https://blog.csdn.net/ViatorSun/article/details/119940759 https://zhuanlan.zhihu.com/p/361140988 维度计算 输入( N,…...
使用PyTorch实现图像增广与模型训练实战
本文通过完整代码示例演示如何利用PyTorch和torchvision实现常用图像增广方法,并在CIFAR-10数据集上训练ResNet-18模型。我们将从基础图像变换到复杂数据增强策略逐步讲解,最终实现一个完整的训练流程。 一、图像增广基础操作 1.1 准备工作 #matplotli…...
PyTorch实现糖尿病预测的CNN模型:从数据加载到模型部署全解析【N折交叉验证、文末免费下载】
本文将详细介绍如何使用PyTorch框架构建一个卷积神经网络(CNN)来预测糖尿病,包含完整的代码实现、技术细节和可视化分析。 1. 项目概述 本项目使用经典的Pima Indians Diabetes数据集,通过5折交叉验证训练一个1D CNN模型,最终实现糖尿病预测…...
红队专题-漏洞挖掘-代码审计-反序列化
漏洞挖掘-代码审计-反序列化 加固/防御命令执行相关日志Tools-JNDIExploitJNDI Java Naming and Directory Interface Java命名目录接口注入原理payload参数渗透测试-php命令执行-RCE+Struts2拿webshell普通权限 命令执行 拿 webshellCMD echo 写入一句话 php文件菜刀连接Strut…...
【2025软考高级架构师】——计算机系统基础(7)
摘要 本文主要介绍了计算机系统的组成,包括硬件和软件两大部分。硬件由处理器、存储器、总线、接口和外部设备等组成,软件则涵盖系统软件和应用软件。文章还详细阐述了冯诺依曼计算机的组成结构,包括 CPU、主存储器、外存等,并解…...
【网络原理】TCP协议如何实现可靠传输(确认应答和超时重传机制)
目录 一. TCP协议 二. 确定应答 三. 超时重传 一. TCP协议 1)端口号 源端口号:发送方端口号目的端口号:接收方端口号 16位(2字节)端口号,可以表示的范围(0~65535) 源端口和目的…...
Java synchroinzed和ReentrantLock
synchronized —— JVM亲儿子的暗黑兵法 核心思想:“锁即对象,对象即锁!” 底层三板斧 对象头里的锁密码 每个Java对象头里藏了两个骚东西: Mark Word:32/64位的比特修罗场,存哈希码、GC年龄࿰…...
【Linux】vim配置----超详细
目录 一、插件管理器准备 二、目录准备 三、安装插件 一、插件管理器准备 Vim-plug 是一个Vim插件管理器,利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单,而且在操作过程中会给出很多易读的反馈信息,是一个自由、…...
驱动开发硬核特训 · Day 15:电源管理核心知识与实战解析
在嵌入式系统中,电源管理(Power Management)并不是“可选项”,而是实际部署中影响系统稳定性、功耗、安全性的重要一环。今天我们将以 Linux 电源管理框架 为基础,从理论结构、内核架构,再到典型驱动实战&a…...
如何使用人工智能大模型,免费快速写工作计划?
如何使用人工智能大模型,免费快速写工作计划? 具体视频教程https://edu.csdn.net/learn/40406/666579...
延长(暂停)Windows更新
延长(暂停)Windows更新 因为不关闭更新有时候就会出现驱动或者软硬件不兼容,导致蓝屏出现。 注:为什么选择延长更新而不是用软件暂停更新,因为使用软件暂停更新会出现一下问题,比如微软商店打不开等等 键…...
QT实现串口透传的功能
在一些产品的开发的时候,需要将一个串口的数据发送给另外一个串口进行转发。 具体的代码如下: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::Ma…...
分布类相关的可视化图像
目录 一、直方图(Histogram) 1.定义 2.特点 3.局限性 4.类型 5.应用场景 6.使用Python实现 二、密度图(Density Plot) 1.定义 2.特点 3.局限性 4.类型 5.应用场景 6.使用Python实现 三、箱线图(Box Plo…...
【android bluetooth 框架分析 02】【Module详解 12】【 BidiQueue、BidiQueueEnd、Queue介绍】
1. BidiQueue 和 BidiQueueEnd 蓝牙协议栈里面有很多 BidiQueue ,本节就专门来梳理这块内容。 2. BidiQueue 介绍 BidiQueue,是 Host 与 Controller 层通信的中枢之一, acl_queue_、sco_queue_、iso_queue_ 都是 BidiQueue 类型。让我们一起看一下这个…...
c++通讯录管理系统
通讯录是一个可以记录亲人,好友的信息工具。 功能包括: 1,添加联系人:向通讯录添加新人,包括(姓名,性别年龄,联系电话,家庭住址) 2,显示联系人…...
React 打包
路由懒加载 原本的加载方式 #使用lazy()函数声明的路由页面 使用Suspense组件进行加载 使用CDN优化...
day1 python训练营
变量与输出 print(1,2,3,sep\n,endsep用来区分两个变量,end会紧跟最后一个变量) print(1,2,3,sepaaa,endsep用来区分两个变量,3后面不会再输出aaa) 格式化字符串 变量名值 print(f"变量名{变量名}") 变量的基础运算 ,-*,/ 注意*不要忘写。比如2j就不…...
C语言状态字与库函数详解:概念辨析与应用实践
C语言状态字与库函数详解:概念辨析与应用实践 一、状态字与库函数的核心概念区分 在C语言系统编程中,"状态字"和"库函数"是两个经常被混淆但本质完全不同的概念,理解它们的区别是掌握系统编程的基础。 1. 状态字&…...
软件测试笔记(测试的概念、测试和开发模型介绍、BUG介绍)
软件测试笔记 认识测试 软件测试是啥? 说白了,就是检查软件的功能和效果是不是用户真正想要的东西。比如用户说“我要一个能自动算账的软件”,测试就是看这个软件到底能不能准确算账、有没有漏掉功能。 软件测试定义:软件测试就…...
Python多进程同步全解析:从竞争条件到锁、信号量的实战应用
1. 进程同步的必要性 在多进程编程中,当多个进程需要访问共享资源时,会出现竞争条件问题。例如火车票售卖系统中,如果多个售票窗口同时读取和修改剩余票数,可能导致数据不一致。 1.1 竞争条件示例 from multiprocessing import…...
Vue3 + TypeScript,关于item[key]的报错处理方法
处理方法1:// ts-ignore 注释忽略报错 处理方法2:item 设置为 any 类型...
Spring源码中关于抽象方法且是个空实现这样设计的思考
Spring源码抽象方法且空实现设计思想 在Spring源码中onRefresh()就是一个抽象方法且空实现,而refreshBeanFactory()方法就是一个抽象方法。 那么Spring源码中onRefresh方法定义了一个抽象方法且是个空实现,为什么这样设置,好处是什么。为…...
Pandas数据可视化
在当今这个数据驱动的时代,数据可视化已经成为数据分析不可或缺的一部分。通过图形化的方式展示数据,我们能够更直观地理解数据的分布、趋势和关系,从而做出更加精准的决策。Pandas,作为Python中最为流行的数据处理库,…...
string类(详解)
【本节目标】 1. 为什么要学习string类 2. 标准库中的string类 3. string类的模拟实现 4. 扩展阅读 1. 为什么学习string类? 1.1 C语言中的字符串 C 语言中,字符串是以 \0 结尾的一些字符的集合,为了操作方便, C 标准库中提供…...
零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!
写在前面 —— 超越默认样式,掌握 Matplotlib 精细控制,打造专业级可视化图表 上一篇博客,我们学习了 Matplotlib 的基础绘图功能,掌握了如何绘制常见的折线图、柱状图、散点图和饼图,并进行了基本的图表元素定制,例如添加标题、标签、图例等。 这些基础技能已经能让我…...
【上位机——MFC】MFC入门
MFC库中相关类简介 CObject MFC类库中绝大部分类的父类,提供了MFC类库中一些基本的机制。 对运行时类信息的支持。对动态创建的支持。对序列化的支持。 CWinApp 应用程序类,封装了应用程序、线程等信息。 CDocument 文档类,管理数据 F…...
ASP.NET Core 最小 API:极简开发,高效构建(下)
在上篇文章 ASP.NET Core 最小 API:极简开发,高效构建(上) 中我们添加了 API 代码并且测试,本篇继续补充相关内容。 一、使用 MapGroup API 示例应用代码每次设置终结点时都会重复 todoitems URL 前缀。 API 通常具有…...
【leetcode100】一和零
1、题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:…...
代码随想录算法训练营第五十三天 | 105.有向图的完全可达性 106.岛屿的周长
105.有向图的完全可达性 题目链接:101. 孤岛的总面积 文章讲解:代码随想录 视频讲解:图论:岛屿问题再出新花样 | 深搜优先搜索 | 卡码网:101.孤岛总面积_哔哩哔哩_bilibili 思路: 1.确认递归函数&…...
在 Debian 10.x 安装和配置 Samba
1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装 Samba sudo apt install samba -y3. 配置 Samba 备份默认配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak编辑配置文件 sudo nano /etc/samba/smb.conf示例配置(共享目录) …...
Python中的短路运算
近期在学习python的过程中遇到此问题,遂总结记录 在”and“逻辑判定布尔类型时: 若判定对象均为True,则输出最后一个判别为True的对象 若判定对象的数据类型中有布尔类型,且最终结果为False,则输出布尔类型False 若判定对象的…...