目录

1. 两数之和

1.1 题目解析

1.2 解法

1.3 代码实现

2. 只出现一次的数字II

2.1 题目解析

2.2 解法

2.3 代码实现


1. 两数之和

371. 两整数之和 - 力扣(LeetCode)

给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。

示例 1:

输入:a = 1, b = 2
输出:3

示例 2:

输入:a = 2, b = 3
输出:5

提示:

  • -1000 <= a, b <= 1000

1.1 题目解析

本题要求在不使用加减运算符的情况下,计算两个整数的和。换句话说,要实现“加法”的本质操作:无进位相加 + 进位叠加

常规解法
最直观的想法是直接写 return a + b;,但是题目显然禁止这样。
既然不能用 + -,我们需要模拟“加法”的底层过程。二进制加法本质上有两部分:

  • 无进位相加:用 异或运算 (XOR) 实现,因为相同位相加结果为 0,不同为 1。

  • 进位部分:用 与运算 (AND) 再左移一位实现,因为只有 1+1 才会产生进位。

这个过程需要循环,直到没有进位为止。

思路转折
加法能拆解为两个基本的位运算 → 迭代模拟 → 得到最终和。
这种思路的优点:复杂度始终是 O(1),因为整数位数是固定的(32 位)。

1.2 解法

用 a ^ b 表示“当前无进位的和”,用 (a & b) << 1 表示“进位”,不断迭代,直到进位为 0。
公式:

sum = a ^ b
carry = (a & b) << 1
a = sum
b = carry

i)初始化 a, b。

ii)计算无进位和:a ^ b。

iii)计算进位:(a & b) << 1。

iiii)更新 a 和 b。

iiiii)重复,直到进位 b = 0。

iiiiii)返回最终结果 a。

1.3 代码实现

class Solution {public int getSum(int a, int b) {while (b != 0) {int sum = a ^ b;       // 无进位和int carry = (a & b) << 1; // 进位a = sum;b = carry;}return a;}
}

复杂度分析

  • 时间复杂度:O(1),因为整数位数有限(最多 32 次迭代)。

  • 空间复杂度:O(1),只用常数额外变量。

2. 只出现一次的数字II

137. 只出现一次的数字 II - 力扣(LeetCode)

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

提示:

  • 1 <= nums.length <= 3 * 104
  • -231 <= nums[i] <= 231 - 1
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

2.1 题目解析

在一个数组里,所有数字都出现三次,只有一个数字出现一次,找出它。
换句话说,本质是:如何在三次重复噪声中,唯一识别出那个单独元素

常规解法
直观做法是用哈希表统计频次,再找频次为 1 的元素。
哈希表能解决,但空间复杂度是 O(n),题目要求 O(1)。
因此必须用位运算,直接利用二进制规律。

思路转折
每个数的二进制位,若出现三次,总和必能被 3 整除。
只有那个单独出现一次的数,会在某些二进制位上让总和不能整除 3。
所以:逐位统计 → 取余 → 重建结果。
这种方法复杂度 O(32n) = O(n),空间 O(1)

2.2 解法

按位统计每个二进制位出现的次数,模 3 去掉“三次噪声”,剩下的位拼接成结果。
公式:

bitSum[i] = Σ(num >> i & 1)
if bitSum[i] % 3 != 0 → 结果的第 i 位 = 1

i)初始化结果变量 ret = 0。

ii)遍历 32 位(因为 int 是 32 位)。

iii)对于每一位,统计所有数在该位上的 1 的个数。

iiii)如果该位 1 的个数 % 3 ≠ 0,说明唯一数在该位上有 1。

iiiii)把该位写入 ret。

iiiiii)返回 ret。

正确性:三次重复的性质

题目保证:除一个元素外,其余元素都出现三次→ 如果我们单独看数组中某一位 i,每个出现三次的数会在这位上贡献 0+0+0=0 或 1+1+1=3。
换句话说:

  • 三次重复的数对第 i 位的总和一定是 3 的倍数

2.3 代码实现

class Solution {public int singleNumber(int[] nums) {int ret = 0;for (int i = 0; i < 32; i++) {int sum = 0;for (int num : nums) {sum += (num >> i) & 1; // 统计第 i 位}if (sum % 3 != 0) {ret |= (1 << i); // 恢复结果的第 i 位}}return ret;}
}

复杂度分析

  • 时间复杂度:O(32n) ≈ O(n)。

  • 空间复杂度:O(1)。

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

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

相关文章

Spring AI 快速接入 DeepSeek 大模型

Spring AI 快速接入 DeepSeek 大模型 文章目录Spring AI 快速接入 DeepSeek 大模型Spring AI 框架概述核心特性适用场景官网与资源AI 提供商与模型类型模型类型&#xff08;Model Type&#xff09;AI提供商&#xff08;Provider&#xff09;两者的关系Spring AI 框架支持哪些 A…

jQuery 知识点复习总览

文章目录jQuery 知识点复习总览一、jQuery 基础1. jQuery 简介2. jQuery 引入3. jQuery 核心函数二、选择器1. 基本选择器2. 层级选择器3. 过滤选择器4. 表单选择器三、DOM 操作1. 内容操作2. 属性操作3. CSS 操作4. 元素操作四、事件处理1. 事件绑定2. 事件对象3. 自定义事件五…

博客系统接口自动化练习

框架图&#xff1a; 详细代码地址&#xff1a;gitee仓库 博客系统接口自动化文档请看文章顶部。

智慧矿山误报率↓83%!陌讯多模态融合算法在矿用设备监控的落地优化

原创声明&#xff1a;本文为原创技术解析文章&#xff0c;核心技术参数与架构设计引用自 “陌讯技术白皮书&#xff08;智慧矿山专项版&#xff09;”&#xff0c;算法部署相关资源适配参考aishop.mosisson.com平台的陌讯视觉算法专项适配包&#xff0c;禁止未经授权的转载与二…

Laravel 使用阿里云OSS S3 协议文件上传

1. 安装 S3 软件包 composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies2. 配置.env 以阿里云 OSS 地域华东2 上海为例: FILESYSTEM_DISKs3 //设置默认上传到S3AWS_ACCESS_KEY_ID***…

UVM一些不常用的功能

uvm_coreservice_t是什么AI&#xff1a;在 UVM&#xff08;Universal Verification Methodology&#xff09;中&#xff0c;uvm_coreservice_t 是一个核心服务类&#xff0c;它扮演着UVM 框架内部核心服务的 “管理者” 和 “统一入口” 的角色。其主要作用是封装并提供对 UVM …

怎么确定mongodb是不是链接上了?

现有mongosh链接了MongoDB,里面能操作,但是想python进行链接,因为代码需要,现在测试下链接成功了没有。如下: 要确认你的 MongoDB 连接是否成功,可以通过以下方法检查: 1. 使用 list_database_names 方法【测试成功】 python import asyncioasync def test_connecti…

Unity 二进制读写小框架

文章目录前言框架获取与集成使用方法基本配置自动生成序列化方法实战示例技术原理与优势二进制序列化的优势SJBinary的设计特点最佳实践建议适用场景总结前言 在Unity开发过程中&#xff0c;与后台交互时经常需要处理大型数据文件。当遇到一个近2MB的本地JSON文件需要解析为对…

​Kubernetes 详解:云原生时代的容器编排与管理

一 Kubernetes 简介及部署方法 1.1 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个阶段&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xf…

Kotlin 中的枚举类 Enum Class

枚举类在 Kotlin 中是非常强大和灵活的工具,可以用于表示一组固定的常量,并且可以包含属性、方法、构造函数和伴生对象。它们在处理状态、选项等场景中非常有用。 1、枚举类的定义 枚举类用于创建具有一组数量有限的可能值的类型。 枚举的每个可能值都称为“枚举常量”。每个…

集成电路学习:什么是K-NN最近邻算法

K-NN:最近邻算法 K-NN,即K-最近邻算法(K-Nearest Neighbor algorithm),是一种基本的监督学习算法,广泛应用于分类和回归问题中。以下是对K-NN算法的详细解析: 一、K-NN算法的基本原理 1、K-NN算法的核心思想是: 对于一个新的数据点,算法会在训练数据集中找到与…

2025最新版mgg格式转MP3,mflac转mp3,mgg格式如何转mp3?

注&#xff1a;需要使用旧版客户端&#xff0c;并需要禁用更新。使用说明内有链接打开软件&#xff0c;可以选择将待转换的歌曲拖入&#xff1b;或者点击添加将mgg或者mflac歌曲拖入点击开始转换等待一会就转换完成&#xff0c;默认转换后的歌曲存在桌面的【转换成功】的文件夹…

嵌入式学习day34-网络-tcp/udp

day33练习&#xff1a;客户端 与 服务器实现一个点对点聊天tcp客户端clifd socketconnect//收 --父进程 //发 --子进程 tcp服务器 listenfd socketbindlistenconnfd accept()//收 -- 父进程 //发 -- 子进程client.c#include "../head.h"int res_fd[1]; // 只需要存…

零知开源——基于STM32F103RBT6与ADXL362三轴加速度计的体感迷宫游戏设计与实现

✔零知IDE 是一个真正属于国人自己的开源软件平台&#xff0c;在开发效率上超越了Arduino平台并且更加容易上手&#xff0c;大大降低了开发难度。零知开源在软件方面提供了完整的学习教程和丰富示例代码&#xff0c;让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品&am…

《Linux 网络编程一:网络编程导论及UDP 服务器的创建与数据接收》

Linux下的网络编程1. 目的实现不同主机之间进程的通信。2. 问题主机之间在物理层面必须互联互通。进程之间在软件层面必须互联互通。IP地址&#xff1a;计算机的软件地址&#xff0c;用于标识计算机设备。MAC地址&#xff1a;计算机的硬件地址&#xff08;固定&#xff09;。网…

排序(数据结构)

比较排序 插入排序&#xff08;斗地主摸牌就是一个插入排序&#xff09; 单纯的插入排序也叫直接插入排序 时间复杂度&#xff1a; 最好O(n)最坏O(n^2) 过程 先写单趟&#xff0c;再写整体 依次比较&#xff0c;如果大于就往后挪动&#xff0c;否则就退出循环&#xff0c;插入数…

【C++组件】Elasticsearch 安装及使用

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C框架/库 目录&#x1f525; 介绍 &#x1f525; ES 安装 &#x1f98b; 安装 kibana&#x1f98b; ES 客户端的安装&#x1f525; ES 核心概念 &#x1f98b; 索引&#xff08;Index&#xff09;&…

项目:电动车报警器

1.项目需求 点击遥控器A按键&#xff0c;系统进入警戒模式&#xff0c;一旦检测到震动(小偷偷车)&#xff0c;则喇叭发出声响报警&#xff0c;吓退小偷。 点击遥控器B按键&#xff0c;系统退出警戒模式&#xff0c;再怎么摇晃系统都不会报警&#xff0c;否则系统一直发出尖叫&a…

GDSFactory环境配置(PyCharm+Git+KLayout)

1、安装 PyCharm 和 KLayout 安装 PyCharm&#xff08;官网社区版即可&#xff09;和 KLayout&#xff08;官网最新版&#xff09;&#xff0c;这两款软件均开源&#xff0c;安装操作简单&#xff0c;这里不再赘述。&#xff08;注意&#xff1a;PyCharm软件是否安装成功以能否…

STM32 定时器(输出模式)

⚙️ ​一、输出模式总览​STM32定时器的输出比较模式通过比较计数器&#xff08;CNT&#xff09;与捕获/比较寄存器&#xff08;CCRx&#xff09;的值&#xff0c;控制输出引脚&#xff08;OCx&#xff09;的电平状态。六种模式定义如下&#xff1a;​模式宏​​触发动作​&am…