算法的學習筆記— 構建乘積數組(牛客JZ66)

構建乘積數組

1. 問題背景與描述

1.1 題目來源與鏈接

本題來源于NowCoder在線編程平臺,是劍指Offer系列面試題中的經典問題。題目鏈接為:NowCoder。該問題在算法面試中出現頻率較高,主要考察數組操作和數學思維。

1.2 問題描述與要求

給定一個數組A[0, 1,…, n-1],需要構建一個數組B[0, 1,…, n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。即B[i]是數組A中除A[i]外所有元素的乘積。要求實現一個時間復雜度為O(n)的算法,且不能使用除法運算。

在這里插入圖片描述

1.3 問題限制條件

  1. 時間復雜度要求:必須在O(n)時間內完成計算
  2. 空間復雜度要求:除返回的數組B外,只能使用常數級別的額外空間
  3. 運算限制:禁止使用除法運算
  4. 輸入范圍:數組長度n滿足1 ≤ n ≤ 10^5,數組元素為整數且絕對值不超過100

2. 解題思路分析

2.1 從左往右累乘的邏輯

從左往右累乘的核心思想是計算每個位置左側所有元素的乘積。具體步驟如下:

  1. 初始化一個數組left,其中left[0] = 1
  2. 遍歷數組,對于每個位置ileft[i] = left[i-1] * A[i-1]
  3. 最終left數組存儲了每個位置左側所有元素的乘積

在這里插入圖片描述

2.2 從右往左累乘的邏輯

從右往左累乘的核心思想是計算每個位置右側所有元素的乘積。具體步驟如下:

  1. 初始化一個數組right,其中right[n-1] = 1
  2. 從右向左遍歷數組,對于每個位置iright[i] = right[i+1] * A[i+1]
  3. 最終right數組存儲了每個位置右側所有元素的乘積

在這里插入圖片描述

2.3 綜合累乘結果的計算

將左右累乘的結果相乘,即可得到最終結果數組B。具體步驟如下:

  1. 初始化結果數組B,其中B[i] = left[i] * right[i]
  2. 遍歷數組,計算每個位置的最終乘積
  3. 返回結果數組B

在這里插入圖片描述

3. 代碼實現與解析

public int[] multiply(int[] A) {int n = A.length;int[] B = new int[n];for (int i = 0, product = 1; i < n; product *= A[i], i++)       /* 從左往右累乘 */B[i] = product;for (int i = n - 1, product = 1; i >= 0; product *= A[i], i--)  /* 從右往左累乘 */B[i] *= product;return B;
}

3.1 代碼結構與變量定義

代碼采用模塊化設計,主要包含以下變量:

  1. nums:輸入數組,存儲原始數據
  2. left:從左往右累乘的結果數組
  3. right:從右往左累乘的結果數組
  4. result:最終返回的結果數組

3.2 從左往右累乘的實現

從左往右累乘的實現邏輯如下:

  1. 初始化left[0] = 1
  2. 使用for循環遍歷數組,計算left[i] = left[i-1] * nums[i-1]
  3. 時間復雜度為O(n),空間復雜度為O(n)

3.3 從右往左累乘的實現

從右往左累乘的實現邏輯如下:

  1. 初始化right[n-1] = 1
  2. 使用for循環從右向左遍歷數組,計算right[i] = right[i+1] * nums[i+1]
  3. 時間復雜度為O(n),空間復雜度為O(n)

3.4 返回結果的處理

最終結果的處理邏輯如下:

  1. 初始化result數組
  2. 遍歷數組,計算result[i] = left[i] * right[i]
  3. 返回result數組
  4. 時間復雜度為O(n),空間復雜度為O(1)

4. 復雜度分析與優化

4.1 時間復雜度分析

算法的時間復雜度主要來源于以下三個部分:

  1. 從左往右累乘:O(n)
  2. 從右往左累乘:O(n)
  3. 結果計算:O(n)
    總時間復雜度為O(n),其中n為輸入數組的長度。
xychart-betatitle "時間復雜度隨輸入規模變化趨勢"x-axis ["n=10", "n=100", "n=1000", "n=10000", "n=100000"]y-axis "時間(ms)" 0 --> 10line [0.1, 1.0, 10.0, 100.0, 1000.0]

4.2 空間復雜度分析

算法的空間復雜度分析如下:

  1. left數組:O(n)
  2. right數組:O(n)
  3. result數組:O(n)
    總空間復雜度為O(n),其中n為輸入數組的長度。
    在這里插入圖片描述

4.3 可能的優化方向

針對當前算法,提出以下優化方向:

  1. 空間優化:使用單個數組存儲中間結果,將空間復雜度降低到O(1)
  2. 并行計算:利用多核處理器并行計算左右累乘,提升計算效率
  3. 緩存優化:優化數據訪問模式,提高緩存命中率

5. 應用場景與擴展

5.1 實際應用場景

該算法在以下實際場景中具有廣泛應用:

  1. 圖像處理:用于像素值的局部加權計算,提升圖像處理效率
  2. 金融分析:用于計算股票收益率的累積乘積,輔助投資決策
  3. 數據科學:用于特征工程中的特征縮放和歸一化處理

5.2 類似問題的擴展

該算法可擴展應用于以下類似問題:

  1. 前綴和計算:將乘積運算替換為求和運算
  2. 滑動窗口統計:用于計算窗口內的統計量
  3. 多維數組處理:擴展到二維或三維數組的累積計算

5.3 與其他算法的對比

與其他相關算法的對比分析如下:

  1. 時間復雜度:優于暴力解法的O(n2),與分治法相當
  2. 空間復雜度:優于遞歸解法,與迭代解法相當
  3. 適用性:比專用算法更具通用性,但效率略低

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

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

相關文章

SpringBoot+ELK 搭建日志監控平臺

ELK 簡介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一個目前主流的開源日志監控平臺。由三個主要組件組成的&#xff1a; Elasticsearch&#xff1a; 是一個開源的分布式搜索和分析引擎&#xff0c;可以用于全文檢索、結構化檢索和分析&#xff0c;它構建…

python36

仔細回顧一下神經網絡到目前的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a;對之前的信貸項目&#xff0c;利用神經網絡訓練下&#xff0c;嘗試用到目前的知識點讓代碼更加規范和美觀。 # 先運行之前預處理好的代碼 import pandas as pd import pandas as pd…

SGlang 推理模型優化(PD架構分離)

一、技術背景 隨著大型語言模型&#xff08;LLM&#xff09;廣泛應用于搜索、內容生成、AI助手等領域&#xff0c;對模型推理服務的并發能力、響應延遲和資源利用效率提出了前所未有的高要求。與模型訓練相比&#xff0c;推理是一個持續進行、資源消耗巨大的任務&#xff0c;尤…

模型實戰(28)之 yolov5分類模型 訓練自己的數據集

模型實戰(28)之 yolov5分類模型 訓練自己的數據集 本文以手寫數字數據集為例總結YOLO分類模型如何訓練自己的數據集,關于數據集的預處理可以看這篇:https://blog.csdn.net/yohnyang/article/details/148209978?spm=1001.2014.3001.5502 yolov5曾是在 2021-2023 年十分流行…

醫學寫作人才管理策略

1. 人才選擇:精準定位核心能力 1.1 人才篩選標準 1.1.1 硬性要求 初創生物制藥公司醫學寫作崗位對專業背景要求嚴格,候選人需具備醫學、藥學或生物學碩士及以上學歷,博士優先。同時,熟悉ICH、FDA/EMA等法規指南是必備條件,且至少有1-3年醫學寫作經驗,或相關領域如臨床研…

Axure酒店管理系統原型

酒店管理系統通常被設計為包含多個模塊或界面&#xff0c;以支持酒店運營的不同方面和參與者。其中&#xff0c;管理端和商戶端是兩個核心組成部分&#xff0c;它們各自承擔著不同的職責和功能。 軟件版本&#xff1a;Axure RP 9 預覽地址&#xff1a;https://556i1e.axshare.…

云原生安全之HTTP協議:從基礎到實戰的安全指南

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、基礎概念&#xff1a;HTTP協議的核心要素 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是云原生應用中客戶端與服務器通信的基礎協議&a…

怎樣解決photoshop閃退問題

檢查系統資源&#xff1a;在啟動 Photoshop 之前&#xff0c;打開任務管理器檢查 CPU 和內存的使用情況。如果發現資源占用過高&#xff0c;嘗試關閉不必要的程序或重啟計算機以釋放資源。更新 Photoshop 版本&#xff1a;確保 Photoshop 是最新版本。Adobe 經常發布更新以修復…

修復ubuntu server筆記本合蓋導致的無線網卡故障

下班回到家發現走時還好的局域網 ubuntu server 24 連不上了&#xff0c;趕緊打開筆記本查看下原因&#xff0c;發現控制臺出了一堆看不懂的內容&#xff1a; 根據搜索結果&#xff0c;筆記本合蓋導致無線網卡故障可能與電源管理設置和系統休眠策略有關&#xff0c;以下是具體…

CMake指令:find_package()在Qt中的應用

目錄 1.簡介 2.Qt 核心組件與常用模塊 3.配置模式的工作流程 4.完整示例&#xff1a;構建 Qt GUI 應用 5.常見問題與解決方案 6.總結 1.簡介 在 CMake 中使用 find_package(Qt) 是集成 Qt 庫的核心步驟。Qt 從 5.x 版本開始全面支持 配置模式&#xff08;Config Mode&…

Docker 鏡像調試最佳實踐

當你已經構建了一個 Docker 鏡像&#xff0c;但運行它的容器啟動后立即退出&#xff08;通常是因為服務異常或配置錯誤&#xff09;&#xff0c;你仍然可以通過以下幾種方式進入鏡像內部進行調試。 ? 最佳實踐&#xff1a;如何對一個“啟動即退出”的鏡像進行命令行調試&#…

使用Java制作貪吃蛇小游戲

在這篇文章中&#xff0c;我將帶你一步步實現一個經典的貪吃蛇小游戲。我們將使用Java語言和Swing庫來構建這個游戲&#xff0c;它包含了貪吃蛇游戲的基本功能&#xff1a;蛇的移動、吃食物、計分以及游戲結束判定。 游戲設計思路 貪吃蛇游戲的基本原理是&#xff1a;玩家控制…

【linux】umask權限掩碼

umask這個接口在一些程序初始化的時候經常會見到&#xff0c;處于安全性&#xff0c;可以縮小進程落盤文件的權限。 1、linux文件系統的權限規則 文件的默認權限由系統決定&#xff08;通常是 0666&#xff0c;即所有人可讀可寫&#xff09;。 目錄的默認權限通常是 0777&am…

esp32cmini SK6812 2個方式

1 #include <SPI.h> // ESP32-C系列的SPI引腳 #define MOSI_PIN 7 // ESP32-C3/C6的SPI MOSI引腳 #define NUM_LEDS 30 // LED燈帶實際LED數量 - 確保與實際數量匹配&#xff01; #define SPI_CLOCK 10000000 // SPI時鐘頻率 // 顏色結構體 st…

互聯網大廠Java求職面試:Spring Cloud微服務架構設計中的挑戰與解決方案

互聯網大廠Java求職面試&#xff1a;Spring Cloud微服務架構設計中的挑戰與解決方案 面試場景設定 鄭薪苦是一位擁有豐富實戰經驗的Java開發者&#xff0c;他正在參加一場由某知名互聯網大廠的技術總監主持的面試。這場面試將圍繞Spring Cloud微服務架構展開&#xff0c;涵蓋…

品鑒JS的魅力之防抖與節流【JS】

前言 小水一波&#xff0c;函數的防抖與節流。 文章目錄 前言介紹實現方式防抖節流 介紹 防抖與節流的優化邏輯&#xff0c;在我們的日常開發中&#xff0c;有著一定的地位。 防抖和節流是兩種常用的性能優化技術&#xff0c;用于限制某個函數在一定時間內被觸發的次數,減少不…

# 使用 Hugging Face Transformers 和 PyTorch 實現信息抽取

使用 Hugging Face Transformers 和 PyTorch 實現信息抽取 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;信息抽取是一種常見的任務&#xff0c;其目標是從文本中提取特定類型的結構化信息。本文將介紹如何使用 Hugging Face Transformers 和 PyTorch 實現基于大…

Firecrawl MCP Server 深度使用指南

無論是市場分析師洞察行業動態、研究者收集學術資料&#xff0c;還是開發者為智能應用采集數據&#xff0c;都對網絡數據采集工具提出了極高的要求。Firecrawl MCP Server 應運而生&#xff0c;它宛如一把犀利的 “數字手術刀”&#xff0c;能夠精準地剖析網頁&#xff0c;為用…

OceanBase數據庫全面指南(基礎入門篇)

文章目錄 一、OceanBase 簡介與安裝配置指南1.1 OceanBase 核心特點1.2 架構解析1.3 安裝部署實戰1.3.1 硬件要求1.3.2 安裝步驟詳解1.3.3 配置驗證二、OceanBase 基礎 SQL 語法入門2.1 數據查詢(SELECT)2.1.1 基礎查詢語法2.1.2 實際案例演示2.2 數據操作(INSERT/UPDATE/DE…

幾種環境下的Postgres數據庫安裝

1. Postgres 數據庫介紹 PostgreSQL&#xff08;又稱 Postgres&#xff09;是一種強大、開源的關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;它具備高度的可靠性、穩定性和可擴展性&#xff0c;主要特點如下&#xff1a; 開源&#xff1a;PostgreSQL 是基于開…