当前位置:网站首页>leetcode打卡
leetcode打卡
2022-04-22 06:09:00 【Jack_joker】
前几天记录了一小段关于异或的笔记,发现自己对于异或(或者说是位运算)的理解还是太过于浅薄了.
今天leetcode又碰到一道类似的题,发现了位运算的又一奇妙用法
题目:
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例1:
输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1]
示例2:
输入:nums = [1,2,10,4,1,4,3,3] 输出:[2,10] 或 [10,2]
解法:异或分组求解
数组中存在两个只出现了一次的数字,全组异或得到的结果是两个数字异或的结果
找到结果中第一位是1的位置,根据这个位置进行分组,必然可以将两个只出现了一次的数字分成两组,相同数字在同一位也相同,可以分配在同一组.
依靠k=1不断左移试出第一位为1 的位置.
class Solution {
public:
vector<int> singleNumbers(vector<int>& nums) {
int res=0;
for(int i=0;i<nums.size();++i)
res^=nums[i];//对vector容器的所有数字异或得到两个只出现一次数字的结果
int k=1;//令k=1,方便之后对于res结果的判定,找出res以二进制第一个不为0的位置.
while((k&res)==0)
{
k<<=1;//k=1以二进制来右移得到res第一个不为0的位置
}
int a=0,b=0;
for(int i=0;i<nums.size();++i){
if((k&nums[i])==0)a^=nums[i];//根据k和nums[i]的与运算进行分组运算得到两组数据
else b^=nums[i];//将两个只出现一次的数字分成两个不同的组,然后分别异或得到两个数字
}
return vector<int>{a,b};//返回a,b
}
};
foreach循环属于特殊简化的for循环,为了提升开发速度而设计的语句.
for(int i:nums){
cout<<i<<endl;}
nums可以是数组类型集合类型,枚举类型或者是vector类型,nums存在多少个数字,就循环多少次,每一次循环nums就取一个值交给i,i相当于一个接收器,接收nums给的值,每一次循环都重新赋值.
但是一定要注意i与nums必须是相同的类型,如下就会报错.
for(int i:str){}
str是字符串数组,但是i却是int类型,所以i作为接收器就无法成功接收到str类型的值.
版权声明
本文为[Jack_joker]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Jack_joker/article/details/114762040
边栏推荐
- Sss1700 qfn36 single chip designs a USB typec headset | supports the automatic switching of USB headset scheme between wire control and European and American regulations
- 集成电路模拟版图入门-版图基础学习笔记(四)
- 替代FE1.1S,MA8601,性价比高,中文方案,奇岩一级代理,HUB方案
- 旋转选择器 WheelPicker 的使用
- Solution of overdetermined equation
- 机器人系统中CAN卡的应用
- Fire fighting equipment optical fiber networking can to optical fiber converter
- Leetcode268: missing number
- 疫情环境下工程机械中的透传云网关远程程序升级方案
- Design parameters and circuit comparison of type C to HDMI 4k30hz expansion chip scheme cs5261 and cs5266
猜你喜欢
随机推荐
Why not recommend tin spraying process for high-speed PCB with crimping devices
Scheme selection table of USB audio chip / typec audio and video processing chip
如何成为IC验证工程师?
CAN光端机在消防联网中的应用
Matlab GUI zoom - some controls zoom, some controls do not zoom - Design Tutorial
SSS1700
Pl2586 design circuit | pl2586 replaces Fe1 1s circuit diagram | USB2 Scheme design of 0hub industrial hub
转IC设计需要补充哪方面的知识技能?
软件测试流程
Remote program upgrade scheme of transparent cloud gateway in construction machinery under epidemic environment
Mcs-5 interrupt technology (practice)
Fire fighting equipment optical fiber networking can to optical fiber converter
Oracle JDK vs OpenJDK
Application of ring network redundant can optical transceiver in Baldwin fire alarm system
RTD2171U方案|AG9310MFQ替代RTD2171U设计电路|Typec转hdmi 4K30HZ高清投屏方案设计
STM32学习记录0002-STM32初探
C技能树测评——0415体验日记
老程序员常逛的网站(持续更新)
数字IC设计,学完verilog语法,还需要学习什么?
机器人系统中CAN卡的应用









