LeetCode 算法:只出现一次的数字 c++

  • 原题链接🔗:只出现一次的数字
  • 难度:简单⭐️

题目

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

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

示例 1 :
输入:nums = [2,2,1]
输出:1

示例 2 :
输入:nums = [4,1,2,1,2]
输出:4

示例 3 :
输入:nums = [1]
输出:1

提示:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。

位运算

位运算是计算机科学中的一种操作,它直接对整数的二进制位进行操作。位运算符包括以下几种:

  1. AND (&):两个位都为1时,结果为1。
  2. OR (|):两个位中至少有一个为1时,结果为1。
  3. XOR (^):两个位不同的时候结果为1。
  4. NOT (~):反转操作,将1变为0,将0变为1。
  5. 左移 (<<):将数字的所有位向左移动指定的位数。
  6. 右移 (>>):将数字的所有位向右移动指定的位数。

位运算的一些常见用途包括:

  • 快速乘除:利用位运算可以快速实现乘以2的幂次方或除以2的幂次方。
  • 位掩码:用于提取、设置或清除特定的位。
  • 位域:在结构体中使用位域来节省空间。
  • 哈希:在某些哈希算法中使用位运算来混合数据。
  • 加密:在某些加密算法中使用位运算来混淆数据。

下面是一些位运算的例子:

int a = 12; // 二进制表示: 1100
int b = 13; // 二进制表示: 1101// AND
int and_result = a & b; // 结果: 1100 (12)// OR
int or_result = a | b; // 结果: 1101 (13)// XOR
int xor_result = a ^ b; // 结果: 0001 (1)// NOT
int not_result = ~a; // 结果: -13 (二进制表示: 10000000000)// 左移
int left_shift_result = a << 2; // 结果: 48 (二进制表示: 110000)// 右移
int right_shift_result = b >> 1; // 结果: 6 (二进制表示: 110)

请注意,位运算通常对有符号整数使用算术右移,对无符号整数使用逻辑右移。算术右移会保留符号位,而逻辑右移则不会。

题解

  1. 解题思路:位运算法
  • 在LeetCode上,有一个经典的算法题叫做“只出现一次的数字”,它的描述是这样的:

    • 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素都出现了两次。找出那个只出现了一次的元素。

    • 你可以使用二进制位运算的方式来解决这个问题,因为异或运算具有以下性质:

      1. 对任何数 x ,有 x⊕ x = 0。
      2. 对任何数 x ,有 x ⊕ 0 = x。
  • 这意味着,如果我们遍历数组,将每个元素进行异或运算,那么成对出现的元素将会被抵消掉,最终剩下的就是那个只出现一次的元素。

  • 下面是用C++实现的核心部分:

class Solution {
public:int singleNumber(vector<int>& nums) {int result = 0;for (int num : nums) {result ^= num;}return result;}
};
  1. c++ demo
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:int singleNumber(vector<int>& nums) {int result = 0;for (int num : nums) {result ^= num;}return result;}
};int main() {// 创建Solution对象Solution solution;// 测试用例1vector<int> nums1 = {2, 2, 1};cout << "Test 1: " << solution.singleNumber(nums1) << endl; // 应输出1// 测试用例2vector<int> nums2 = {4, 1, 2, 1, 2};cout << "Test 2: " << solution.singleNumber(nums2) << endl; // 应输出4// 测试用例3vector<int> nums3 = {1};cout << "Test 3: " << solution.singleNumber(nums3) << endl; // 应输出1return 0;
}

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

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

相关文章

深入探索机器学习中的目标分类算法

在当今数据驱动的世界中&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09;正逐渐成为解决问题的重要工具。在众多机器学习任务中&#xff0c;目标分类&#xff08;Classification&#xff09;算法尤其受到关注。本文将深入探讨目标分类算法的基本概念、常见类…

面试加分必看,11道接口安全测试面试题!

今天&#xff0c;分享一些在面试中可能会遇到的接口安全测试面试问题&#xff0c;助你在面试中从容不迫。 01.HTTPS 与 HTTP 的区别&#xff1f; 02.OSI七层模型是指&#xff1f; 03.你所知道的 HTTP 状态码&#xff1f; 04.你知道SQL注入吗&#xff1f; 05.SQL 注入与XSS…

js逆向——webpack实战案例(一)

今日受害者网站&#xff1a;https://www.iciba.com/translate?typetext 首先通过跟栈的方法找到加密位置 我们跟进u函数&#xff0c;发现是通过webpack加载的 向上寻找u的加载位置&#xff0c;然后打上断点&#xff0c;刷新网页&#xff0c;让程序断在加载函数的位置 u r.n…

基于php的在线租房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

vue3【实战】响应式主题(实时获取页面比例,指定尺寸内按比例缩放,超过指定尺寸保持高度不变的图片)

实时获取页面比例 移动端设计稿通常为 750px当前窗口的宽为 window.innerWidth通过 useResizeObserver 可实时监听窗口大小的变化 src/stores/theme.ts export const useThemeStroe defineStore(theme, () > {const rate ref(0)function setRate(newRate: number) {rate…

Python数据结构 - 字典

Python字典是另一种可变容器模型,可存储任意类型对象&#xff0c;由于字典是无序的所以不支持索引和切片。 格式为&#xff1a;dict {k1:v1, k2:v2, k3:v3}。 d {"name":"golemon", "age":999}key不可以重复key不能是可变数据类型key一般为字…

【Android】多角度看handler--looper的阻塞

在【Android】app中阻塞的looper为什么可以响应touch事件_消息队列阻塞为什么还能响应点击事件-CSDN博客 里面&#xff0c;我们查看到input事件唤醒应用中的looper阻塞&#xff0c; 作为对比&#xff0c;我们再看看广播中的唤醒&#xff0c;我们知道&#xff0c;在注册的广播…

[大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作

​​​​​​Generation of Complex 3D Human Motion by Temporal and Spatial Composition of Diffusion Models L Mandelli, S Berretti - arXiv preprint arXiv:2409.11920, 2024 通过时间和空间组合扩散模型生成复杂的3D人物动作 摘要 本文提出了一种新的方法&#xff0…

青动CRM V3.2.1

全面解决企业销售团队的全流程客户服务难题旨在助力企业销售全流程精细化、数字化管理&#xff0c;全面解决企业销售团队的全流程客户服务难题&#xff0c;帮助企业有效盘活客户资源、量化销售行为&#xff0c;合理配置资源、建立科学销售体系&#xff0c;提升销售业绩。标准授…

k8s上安装prometheus

一、下载对应的kube-prometheus源码 github地址&#xff1a;https://github.com/prometheus-operator/kube-prometheus 根据自己的Kubernetes版本下载对应的Kube-prometheus源码。 kubectl version 我的kubernetes的版本为v1.30.3固下载master分支的源码 1&#xff09;进入…

地区环境保护支出数据(2007-2023年)

政府环境保护支出是指ZF在环境保护方面投入的CZ资金&#xff0c;用于自然生态保护、污染防治、环境监测与监管等多个领域&#xff0c;旨在改善环境质量、防范环境风险以及促进可持续发展 一、数据介绍 数据名称&#xff1a;地区环境保护支出数据 数据范围&#xff1a;中国31…

【MATLAB代码】三维空间上的RSS(信号强度)定位,n个锚点自适应(锚点数>3即可)(源代码下载链接)

文章目录 代码概况源代码运行结果RSS定位原理讲解1.基本概念2.信号强度与距离关系3. 定位原理 其他情况 代码概况 基于MATLAB的定位程序&#xff0c;使用RSS&#xff08;接收信号强度&#xff09;来估计距离&#xff0c;再由距离计算位置&#xff0c;用于三维空间上的定位。调…

生活中重大决定,除了你自己,谁也帮不了你!

随着年龄增长&#xff0c;越来越发现&#xff1a;生活是非常现实&#xff0c;更现实的社会&#xff0c;自己除了自己&#xff0c;谁也帮不了你。 因此&#xff0c;一个人的生活是好是坏&#xff0c;往往取决于我们自己的努力程度&#xff0c;越努力才会越幸运。没有伞的孩子&am…

【相机】标准 GenICam 通用相机标准

绝大多数相机或者视频卡的应用编程接口&#xff08;API&#xff09;是支持基于GenICam的。 GenICam的目标是提供一个标准化、统一的编程接口&#xff0c;用于基于不同物理接口&#xff08;CoaXPress, GigE Vision等&#xff09;或来自不同供应商的相机和帧捕获器。 GenICam 是…

RSpec简析及应用案例

文章目录 RSpec简析RSpec 的特点如何开始使用 RSpec示例 应用案例控制器测试创建 PostsController 的测试 请求测试创建请求测试 集成测试创建集成测试 RSpec简析 RSpec 是一个流行的 Ruby 测试工具&#xff0c;它支持行为驱动开发&#xff08;BDD&#xff09;。RSpec 提供了一…

消息中间件 Kafka 快速入门与实战

1、概述 最近感觉上班实在是太无聊&#xff0c;打算给大家分享一下Kafka的使用&#xff0c;本篇文章首先给大家分享三种方式搭建Kafka环境&#xff0c;接着给大家介绍kafka核心的基础概念以及Java API的使用&#xff0c;最后分享一个SpringBoot的集成案例&#xff0c;希望对大…

Xcdoe快速更新安装的小Tips

1. 下载Xcdoe 从AppStore更新估计有些慢的话&#xff1b; 可用下载工具从苹果开发者网站直接下载&#xff1a;https://developer.apple.com/download/all/下载完成后解压出来的 Xcode App文件 可以直接拖入 应用程序 文件夹&#xff0c;选择 替换 即可&#xff1b; 2. 下载模…

Ubuntu的基本用法与指令(为后面学习ROS打基础)

目录 0.声明&#xff1a;此博客的部分内容来自B站up主 机器人工匠阿杰&#xff0c;欢迎大家前往up主视频区学习&#xff08;本人正在跟随此up主的视频学习无人机的部分相关知识&#xff09; 1.win空格&#xff08;切换中英文&#xff09; 2.终端指令 1.ls&#xff1a;显示主…

HTTP 和 HTTPS 协议的区别?

在当今的互联网世界中&#xff0c;我们每天都在使用 HTTP 和 HTTPS 协议&#xff0c;但你是否认真了解它们之间的区别&#xff1f;在这篇博客中&#xff0c;我们将深入分析这两种协议的特点、优势及其适用场景&#xff0c;并提供一些示例代码来帮助大家更好地理解。 什么是 HT…

mysql学习教程,从入门到精通,SQL LIKE 运算符(28)

1、SQL LIKE 运算符 在SQL中&#xff0c;LIKE运算符主要用于在WHERE子句中搜索列中的指定模式。它通常与通配符一起使用&#xff0c;如%&#xff08;代表零个、一个或多个字符&#xff09;和_&#xff08;代表单个字符&#xff09;&#xff0c;以执行模糊匹配。下面是一个使用…