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;

    // 测试用例1
    vector<int> nums1 = {2, 2, 1};
    cout << "Test 1: " << solution.singleNumber(nums1) << endl; // 应输出1

    // 测试用例2
    vector<int> nums2 = {4, 1, 2, 1, 2};
    cout << "Test 2: " << solution.singleNumber(nums2) << endl; // 应输出4

    // 测试用例3
    vector<int> nums3 = {1};
    cout << "Test 3: " << solution.singleNumber(nums3) << endl; // 应输出1

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

努比亚 Z17 NX563J Root 教程三方REC刷写工具教程

教程&#xff1a;1&#xff0c;自用成功 正常链接列表 adb devices 检查fastboot链接列表 fastboot devices 解锁设备fastboot oem nubia_unlock NUBIA_NX563J 我用的解锁设备是&#xff1a;fastboot flashing unlock 1.打开开发者选项。将OEM解锁的按钮打开 2.下载附件努…

苹果更新过时产品:三款 Mac 成“古董”,九款 Mac 彻底“停产”

9 月 24 日消息苹果今天更新了“过时产品”名单&#xff0c;新增加了三款 Mac 型号&#xff0c;并将另外九款 Mac 型号从“过时产品”归为“停产产品”。 新入列的 Mac 过时产品&#xff1a; MacBook Air&#xff08;视网膜显示屏&#xff0c;13 英寸&#xff0c;2018 年&…

物联网迎来下半场,国产 IoTOS 打造企业级智能硬件云服务平台

如有需求&#xff0c;文末联系小编 氦氪云 IoTOS 是一套先进的企业级物联网解决方案平台&#xff0c;为万物互联提供可靠安全稳定的终端接入、协议适配、消息路由、数据存储和分析、应用使能等核心功能。面向物联网领域中的终端设备商、系统集成商、应用服务商、能力提供商等&a…

Unity 设计模式 之 行为型模式 -【中介者模式】【迭代器模式】【解释器模式】

Unity 设计模式 之 行为型模式 -【中介者模式】【迭代器模式】【解释器模式】 目录 Unity 设计模式 之 行为型模式 -【中介者模式】【迭代器模式】【解释器模式】 一、简单介绍 二、中介者模式&#xff08;Mediator Pattern&#xff09; 1、什么时候使用中介者模式 2、使用…

CICD 持续集成与持续交付

一 、CICD是什么 CI/CD 是指持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09; 1.1 持续集成&#xff08;Continuous Integration&#xff09; 持续集…

卸载WSL(Ubuntu),卸载linux

禁用 WSL 功能 打开 Windows 功能&#xff1a; 按下 Windows R 打开运行对话框&#xff0c;输入 optionalfeatures&#xff0c;然后按回车。 禁用 WSL&#xff1a; 在弹出的 Windows 功能窗口中&#xff0c;找到 适用于 Linux 的 Windows 子系统&#xff08;Windows Subsystem…

FTP 服务器 linux安装

文章目录 前言一、了解二、安装启动匿名连接 三、创建用户1. 创建系统用户2. 连接3. 连接不上&#xff1f; 5004. 还是连接不上&#xff1f; 5005. 还还还是连不上&#xff1f;530 补充关于创建用户useradd 命令如何设置用户不能登录shell不用系统指定的家目录 vsftpd 配置chro…

深刻理解Redis集群(上):RDB快照和AOF日志

RDB快照 save同步阻塞 客户端 服务端 .conf配置文件 # The filename where to dump the DB dbfilename dump.rdb# rdb-del-sync-files是Redis配置文件中的一个选项&#xff0c;它的作用是在主节点上执行BGSAVE或AOF持久化操作时&#xff0c;删除同步锁文件&#xff0c;以释放磁…

git工具指令

下面是常用的Git命令清单&#xff0c;几个专用名称的译名如下&#xff1a; Workspace &#xff1a;工作区 Index /Stage&#xff1a;暂存区 Repository&#xff1a;仓库区&#xff08;或本地仓库&#xff09; Remote&#xff1a;远程仓库新建代码库 在当前目录新建一个Git代…

java初识

目录 1.命名规范 2.数据类型 3.数据类型转换&#xff08;就是见识一下&#xff09; 4.java里面的输入输出 4.1判断是不是偶数 4.2判断是不是闰年 4.3其他的输入输出 4.4顺序的问题 5.分支语句补充 5.IDEA里面的调试 6.continue的一个案例 1.命名规范 这个命名规范就…

【Java SE】初遇Java,数据类型,运算符

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 1. Java 概述 1.1 Java 是什么 Java 是一种高级计算机语言&#xff0c;是一种可以编写跨平台应用软件&#xff0c;完全面向对象的程序设计语言。Java 语言简单易学…

Java基于easyExcel的自定义表格格式

这里用的到easyExcel版本为3.3.4 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.4</version></dependency> 效果 代码部分 package com.tianyu.test;import com.alibaba.exc…

57 长短期记忆网络(LSTM)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录长短期记忆网络&#xff08;LSTM&#xff09;门控记忆元输入门、忘记门和输出门候选记忆元 (相当于RNN中计算 H t H_t Ht​)记忆元隐状态 从零开始实现初始化模型参数定义模型训练和预测 简洁实现小结练习 长短期记忆网络&#xff08;LSTM&a…

【d53】【Java】【力扣】24.两两交换链表中的节点

思路 定义一个指针cur, 先指向头节点&#xff0c; 1.判断后一个节点是否为空&#xff0c;不为空则交换值&#xff0c; 2.指针向后走两次 代码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*…

[数据集][目标检测]辣椒缺陷检测数据集VOC+YOLO格式695张5类别

重要说明&#xff1a;数据集图片里面都是一个辣椒&#xff0c;请仔细查看图片预览&#xff0c;确认符合要求下载 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文…

Nacos 是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台,旨在帮助开发者更轻松地构建、部署和管理微服务应用。

Nacos 是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台&#xff0c;旨在帮助开发者更轻松地构建、部署和管理微服务应用。Nacos 提供了一系列的功能来支持服务注册与发现、配置管理、服务元数据管理、流量管理、服务健康检查等&#xff0c;是构建云原生应用和服务网…

SpringCloud 2023各依赖版本选择、核心功能与组件、创建项目(注意事项、依赖)

目录 1. 各依赖版本选择2. 核心功能与组件3. 创建项目3.1 注意事项3.2 依赖 1. 各依赖版本选择 SpringCloud: 2023.0.1SpringBoot: 3.2.4。参考Spring Cloud Train Reference Documentation选择版本 SpringCloud Alibaba: 2023.0.1.0*: 参考Spring Cloud Alibaba选择版本。同时…

【软考】高速缓存的组成

目录 1. 说明2. 组成 1. 说明 1.高速缓存用来存放当前最活跃的程序和数据。2.高速缓存位于CPU 与主存之间。3.容量般在几千字节到几兆字节之间。4.速度一般比主存快 5~10 倍&#xff0c;由快速半导体存储器构成。5.其内容是主存局部域的副本&#xff0c;对程序员来说是透明的。…

Java:选择排序

目录 直接选择排序 堆排序 基本思想&#xff1a; 每一次从待排序的数据元素中选出最小(或最大)的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完。 直接选择排序 思路1&#xff1a; 在元素集合array[i]--array[n-1]中选择关键码最大(小…

​fl studio21.2.3.4004中文版永久2024最新下载安装图文详细使用教程​

随着数字音乐制作的快速发展&#xff0c;越来越多的音乐制作软件涌现出来&#xff0c;而FL Studio无疑是其中的佼佼者。作为一款功能强大、易于上手的音乐制作软件&#xff0c;FL Studio V21中文版在继承了前代版本优秀基因的基础上&#xff0c;进一步提升了用户体验&#xff0…