LeetCode算法日記 - Day 20: 兩整數之和、只出現一次的數字II

目錄

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…