位運算題目:連接連續二進制數字

文章目錄

  • 題目
    • 標題和出處
    • 難度
    • 題目描述
      • 要求
      • 示例
      • 數據范圍
  • 解法
    • 思路和算法
    • 代碼
    • 復雜度分析

題目

標題和出處

標題:連接連續二進制數字

出處:1680. 連接連續二進制數字

難度

5 級

題目描述

要求

給定一個整數 n \texttt{n} n,將 1 \texttt{1} 1 n \texttt{n} n 的二進制表示連接得到一個二進制數,返回連接得到的二進制數對應的十進制數對 10 9 + 7 \texttt{10}^\texttt{9} + \texttt{7} 109+7 取余的結果。

示例

示例 1:

輸入: n = 1 \texttt{n = 1} n?=?1
輸出: 1 \texttt{1} 1
解釋:二進制的 "1" \texttt{"1"} "1" 對應十進制的 1 \texttt{1} 1

示例 2:

輸入: n = 3 \texttt{n = 3} n?=?3
輸出: 27 \texttt{27} 27
解釋:二進制下, 1 \texttt{1} 1 2 \texttt{2} 2 3 \texttt{3} 3 分別對應 "1" \texttt{"1"} "1" "10" \texttt{"10"} "10" "11" \texttt{"11"} "11"
將它們依次連接,得到 "11011" \texttt{"11011"} "11011",對應十進制的 27 \texttt{27} 27

示例 3:

輸入: n = 12 \texttt{n = 12} n?=?12
輸出: 505379714 \texttt{505379714} 505379714
解釋:連接結果為 "1101110010111011110001001101010111100" \texttt{"1101110010111011110001001101010111100"} "1101110010111011110001001101010111100",對應十進制的 118505380540 \texttt{118505380540} 118505380540
10 9 + 7 \texttt{10}^\texttt{9} + \texttt{7} 109+7 取余后,結果為 505379714 \texttt{505379714} 505379714

數據范圍

  • 1 ≤ n ≤ 10 5 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{5} 1n105

解法

思路和算法

由于 1 1 1 n n n 的二進制表示的連接結果可能很長,因此需要在遍歷連接結果的過程中計算結果。

初始時,連接結果是 0 0 0。當遍歷到整數 i i i 時,假設 1 1 1 i ? 1 i - 1 i?1 的連接結果對應的整數是 x x x,整數 i i i 的二進制表示有 bits \textit{bits} bits 位,則 1 1 1 i ? 1 i - 1 i?1 的連接結果對應的整數是將 x x x 左移 bits \textit{bits} bits 位之后加 i i i。因此,只要知道 1 1 1 n n n 的每個整數的二進制表示的位數,即可得到連接的結果對應的整數。

如果正整數 x x x 2 2 2 的整數次冪,則 x x x 的二進制表示的位數比 x ? 1 x - 1 x?1 的二進制表示的位數多 1 1 1,這里規定 0 0 0 的二進制表示的位數是 0 0 0。正整數 x x x 2 2 2 的整數次冪等價于 x & ( x ? 1 ) = 0 x ~\&~ (x - 1) = 0 x?&?(x?1)=0,因此可以在 O ( 1 ) O(1) O(1) 的時間內判斷一個整數是不是 2 2 2 的整數次冪。

由此可以得到如下解法。

num \textit{num} num 表示連接結果,用 bits \textit{bits} bits 表示當前整數的二進制表示的位數,初始時 num \textit{num} num bits \textit{bits} bits 都是 0 0 0。依次遍歷從 1 1 1 n n n 的每個整數,對于整數 i i i,執行如下操作。

  1. 判斷 i i i 是否是 2 2 2 的整數次冪。如果 i & ( i ? 1 ) = 0 i ~\&~ (i - 1) = 0 i?&?(i?1)=0,則 i i i 2 2 2 的整數次冪,將 bits \textit{bits} bits 1 1 1,否則 bits \textit{bits} bits 不變。此時 bits \textit{bits} bits i i i 的二進制表示的位數。

  2. num \textit{num} num 的值更新為 ( num < < bits ) + i (\textit{num} << \textit{bits}) + i (num<<bits)+i,并將更新后的值對 1 0 9 + 7 10^9 + 7 109+7 取余。

遍歷結束之后, num \textit{num} num 即為 1 1 1 n n n 的二進制表示的連接結果對應的整數。

需要注意的是,由于 n n n 的最大值是 1 0 5 10^5 105,因此 bits \textit{bits} bits 的最大值是 17 17 17 nums < < bits \textit{nums} << \textit{bits} nums<<bits 的結果可能超出 32 32 32 位整數的范圍。為了避免溢出,應將 num \textit{num} num 聲明為 long \texttt{long} long 型,返回結果時轉成 int \texttt{int} int 型。

代碼

class Solution {public int concatenatedBinary(int n) {final int MODULO = 1000000007;long num = 0;int bits = 0;for (int i = 1; i <= n; i++) {if ((i & (i - 1)) == 0) {bits++;}num = ((num << bits) + i) % MODULO;}return (int) num;}
}

復雜度分析

  • 時間復雜度: O ( n ) O(n) O(n),其中 n n n 是給定的整數。需要遍歷 n n n 個整數,每個整數的操作時間都是 O ( 1 ) O(1) O(1)

  • 空間復雜度: O ( 1 ) O(1) O(1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第十六屆藍橋杯Java b組(試題C:電池分組)

問題描述&#xff1a; 輸入格式&#xff1a; 輸出格式&#xff1a; 樣例輸入&#xff1a; 2 3 1 2 3 4 1 2 3 4 樣例輸出: YES NO 說明/提示 評測用例規模與約定 對于 30% 的評測用例&#xff0c;1≤T≤10&#xff0c;2≤N≤100&#xff0c;1≤Ai?≤10^3。對于 100…

63. 評論日記

2025年4月14日18:53:30 雷軍這次是真的累了_嗶哩嗶哩_bilibili

電商中的訂單支付(內網穿透)

支付頁面 接口文檔 Operation(summary"獲取訂單信息") GetMapping("auth/{orderId}") public Reuslt<OrderInfo> getOrderInfo(Parameter(name"orderId",description"訂單id",requiredtrue) PathVaariable Long orderId){OrderI…

MySQL表的使用(4)

首先回顧一下之前所學的增刪查改&#xff0c;這些覆蓋了平時使用的80% 我們上節課中學習到了MySQL的約束 其中Primary key 是主鍵約束&#xff0c;我們今天要學習的是外鍵約束 插入一個表 外鍵約束 父表 子表 這條記錄中classid為5時候&#xff0c;不能插入&#xff1b; 刪除…

Kotlin作用域函數

在 Kotlin 中&#xff0c;.apply 是一個 作用域函數&#xff08;Scope Function&#xff09;&#xff0c;它允許你在一個對象的上下文中執行代碼塊&#xff0c;并返回該對象本身。它的設計目的是為了 對象初始化 或 鏈式調用 時保持代碼的簡潔性和可讀性。 // 不使用 apply va…

C#集合List<T>與HashSet<T>的區別

在C#中&#xff0c;List和HashSet都是用于存儲元素的集合&#xff0c;但它們在內部實現、用途、性能特性以及使用場景上存在一些關鍵區別。 內部實現 List&#xff1a;基于數組實現的&#xff0c;可以包含重復的元素&#xff0c;并且元素是按照添加的順序存儲的。 HashSet&…

Python 實現的運籌優化系統數學建模詳解(最大最小化模型)

一、引言 在數學建模的實際應用里&#xff0c;最大最小化模型是一種極為關鍵的優化模型。它的核心目標是找出一組決策變量&#xff0c;讓多個目標函數值里的最大值盡可能小。該模型在諸多領域&#xff0c;如資源分配、選址規劃等&#xff0c;都有廣泛的應用。本文將深入剖析最大…

數據庫的種類及常見類型

一&#xff0c;數據庫的種類 最常見的數據庫類型分為兩種&#xff0c;關系型數據庫和非關系型數據庫。 二&#xff0c;關系型數據庫介紹 生產環境主流的關系型數據庫有 Oracle、SQL Server、MySQL/MariaDB等。 關系型數據庫在存儲數據時實際就是采用的一張二維表&#xff0…

PE文件(十五)綁定導入表

我們在分析Windows自帶的一些程序時&#xff0c;常常發現有的程序&#xff0c;如notepad&#xff0c;他的IAT表在文件加載內存前已經完成綁定&#xff0c;存儲了函數的地址。這樣做可以使得程序是無需修改IAT表而直接啟動&#xff0c;這時程序啟動速度變快。但這種方式只適用于…

計算機網絡分層模型:架構與原理

前言 計算機網絡通過不同的層次結構來實現通信和數據傳輸&#xff0c;這種分層設計不僅使得網絡更加模塊化和靈活&#xff0c;也使得不同類型的通信能夠順利進行。在網絡協議和通信體系中&#xff0c;最廣為人知的分層模型有 OSI模型 和 TCP/IP模型。這兩種模型分別定義了計算…

Ollama模型顯存管理機制解析與Flask部署方案對比

一、Ollama顯存釋放機制 Ollama部署模型后&#xff0c;顯存占用分為兩種情況&#xff1a; 首次調用后短暫閑置&#xff08;約5分鐘內&#xff09;&#xff1a; ? 釋放KV Cache等中間計算數據&#xff08;約回收30%-50%顯存&#xff09;。 ? 模型權重仍保留在顯存中&#xf…

KWDB創作者計劃—KWDB技術重構:重新定義數據與知識的神經符號革命

引言&#xff1a;數據洪流中的范式危機 在AI算力突破千卡集群、大模型參數量級邁向萬億的時代&#xff0c;傳統數據庫系統正面臨前所未有的范式危機。當GPT-4展現出跨領域推理能力&#xff0c;AlphaFold3突破蛋白質預測精度時&#xff0c;數據存儲系統卻仍在沿用基于關系代數的…

Unified Modeling Language,統一建模語言

UML&#xff08;Unified Modeling Language&#xff0c;統一建模語言&#xff09;是一種標準化的圖形化建模語言&#xff0c;用于可視化、規范和文檔化軟件系統的設計。UML 提供了一套通用的符號和規則&#xff0c;幫助開發者、架構師和團隊成員更好地理解和溝通軟件系統的結構…

IO模式精講總結

一、IO模型概述 Java中的IO模型主要分為BIO&#xff08;同步阻塞IO&#xff09;、NIO&#xff08;同步非阻塞IO&#xff09;和AIO&#xff08;異步非阻塞IO&#xff09;三種。它們分別適用于不同的業務場景&#xff0c;理解其核心機制對高性能網絡編程至關重要。 二、BIO&…

使用pybind11開發c++擴展模塊輸出到控制臺的中文信息顯示亂碼的問題

使用pybind11開發供Python項目使用的C++擴展模塊時,如果在擴展模塊的C++代碼中向控制臺輸出的信息中包含中文,python程序的控制臺很容易出現亂碼。以如下C++擴展框架代碼為例(這是對上一篇文章簡明使用pybind11開發pythonc+擴展模塊教程-CSDN博客中的C++擴展框架代碼進行少量…

通過jstack分析線程死鎖場景

死鎖的四個必要條件&#xff1a;互斥、持有并等待、不可搶占、循環等待。 死鎖場景是兩個線程各自持有某個鎖&#xff0c;并試圖獲取對方持有的鎖&#xff0c;導致互相等待。 創建死鎖示例代碼 package io.renren.controller;import org.springframework.web.bind.annotation…

PyTorch梯度:深度學習的引擎與實戰解析

一、梯度&#xff1a;深度學習中的指南針 1.1 什么是梯度&#xff1f; 梯度是函數在某一點變化率最大的方向及其大小&#xff0c;就像爬山時最陡峭的上坡方向。在深度學習中&#xff0c;梯度告訴我們如何調整神經網絡參數&#xff0c;使損失函數最小化。 1.2 梯度的重要性 …

【Python爬蟲】詳細入門指南

目錄 一、簡單介紹 二、詳細工作流程以及組成部分 三、 簡單案例實現 一、簡單介紹 在當今數字化信息飛速發展的時代&#xff0c;數據的獲取與分析變得愈發重要&#xff0c;而網絡爬蟲技術作為一種能夠從互聯網海量信息中自動抓取所需數據的有效手段&#xff0c;正逐漸走入…

Golang|Channel 相關用法理解

文章目錄 用 channel 作為并發小容器channel 的遍歷channel 導致的死鎖問題用 channel 傳遞信號用 channel 并行處理文件用channel 限制接口的并發請求量用 channel 限制協程的總數量 用 channel 作為并發小容器 注意這里的 ok 如果為 false&#xff0c;表示此時不僅channel為空…

Windows單機模擬MySQL主從復制

這里寫自定義目錄標題 下載MySQL ZIP壓縮包安裝主庫1、創建配置文件2、安裝服務3、初始化數據庫4、啟動服務5、配置主庫 安裝從庫1、配置ini文件2、安裝服務3、初始化數據庫4、啟動服務5、配置從庫6、驗證從庫狀態 操作主庫驗證 下載MySQL ZIP壓縮包 https://dev.mysql.com/do…