力扣hot100 (除自身以外數組的乘積)

238. 除自身以外數組的乘積

中等

給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。

題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。

請 不要使用除法,且在 O(n) 時間復雜度內完成此題。

示例 1:

輸入: nums = [1,2,3,4] 輸出: [24,12,8,6] 示例 2:

輸入: nums = [-1,1,0,-3,3] 輸出: [0,0,9,0,0]

提示:

2 <= nums.length <= 105 -30 <= nums[i] <= 30 輸入 保證 數組 answer[i] 在 32 位 整數范圍內

進階:你可以在 O(1) 的額外空間復雜度內完成這個題目嗎?( 出于對空間復雜度分析的目的,輸出數組 不被視為 額外空間。)

思路:分別計算每個元素的 左側元素的乘積 and 右側元素的乘積

關鍵: 每個元素的左右乘積如何記錄下來?常規做法是可以開兩個數組left[nums.size]、right[nums.size]記錄.但仔細觀察后可以發現這里每個元素的左右側乘積是連續的. 也就是第i個元素的左乘積 = 第 i - 1 元素的左乘積 * 第 i - 1個元素, 可使用一個變量記錄上一個元素的左乘積得到. 同理可以計算右乘積

class Solution {public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] answer = new int [n];// 初始化每個元素的左右乘積int left = 1;int right = 1;for(int i = 0; i < n; i ++){answer[i] = 1;}
?// 先將所有元素的左乘積給計算出來for(int i = 0; i < n; i ++){// 第i個元素的左乘積 = 第 i - 1 元素的左乘積 * 第 i - 1 個元素answer[i] = left;// 計算第 i + 1 個元素的左乘積left *= nums[i];}
?// 再計算右乘積, 與左乘積同理, 對稱for(int i = n - 1; i >= 0; i --){//不同的是先計算了左乘積(此時answer中保存了每個元素的左乘積), 所以需要用右乘積乘上左乘積, 這里為 *=answer[i] *= right;right *= nums[i];}return answer;}
}

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

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

相關文章

什么是“系統調用”

一、什么是“系統調用”&#xff1f;用生活中的比喻理解 可以把“系統調用”比作你&#xff08;用戶&#xff09;向“管理員”請求幫助完成某件事情的過程。 舉個例子&#xff1a; 你想借書&#xff0c;去圖書館&#xff08;操作系統&#xff09;找管理員&#xff08;內核&a…

三維重建(二十一)——第二步和第三步

文章目錄 一、上一篇5.3.1 train-185.3.2 test-193二、第二步:自己重新寫一個代碼,利用RTK的參數,成功的和gshell的渲染圖片一樣2.1 只能單獨一個圖片,并且需要調整輸入pose\內參問題描述可能原因2.2 批量輸出問題描述可能原因解決方案重新檢查代碼發現錯誤2.3 成功三、第三…

n8n 中 No Operation 節點說明

n8n 中 No Operation 節點說明 當"什么都不做"也是一種設計:n8n No Operation 節點深度解析一、No Operation節點是什么?二、為什么需要"空節點"?1. 流程可視化注釋2. 調試占位符3. 流程拓撲優化三、實戰應用場景場景1:審批流程占位四、設計哲學思考五…

使用 JavaScript 實現數據導出為 Excel 和 CSV 文件

在 Web 開發中&#xff0c;經常會遇到需要將數據導出為文件的需求&#xff0c;例如將數據導出為 Excel 或 CSV 文件。今天&#xff0c;我們就來探討如何使用 JavaScript 實現這一功能。 一、實現思路 我們通過 HTML 創建一個按鈕&#xff0c;點擊按鈕時&#xff0c;觸發 Java…

青聽音樂 1.0.6| 全網音樂免費聽,無損下載,4條音源,界面簡潔無廣告

一款強大的音樂播放器&#xff0c;內部集成了相當豐富的功能&#xff0c;可以一鍵搜索任何想要的歌曲或歌手專輯&#xff0c;同時還支持下載和收藏&#xff0c;擁有非常流暢的速度&#xff0c;使用起來沒有任何限制&#xff01;軟件自帶有大廠的解析音源&#xff0c;運行非常穩…

動態規劃之子序列問題1

以leetcode300題為例 此題最為經典&#xff0c;所有的算法書在講子序列問題時都以這個為模板題&#xff0c;后面的題可以按照此題的分析方法進行分析 區分子序列和子數組 例如a&#xff0c;b&#xff0c;c&#xff0c;d&#xff0c;e這個數組 子數組是必須連續的&#xff0c;…

android-ndk開發(4): linux開發機有線連接android設備

android-ndk開發(4): linux開發機有線連接android設備 2025/05/05 1. 概要 linux 系統&#xff0c; 例如最常見的 ubuntu&#xff0c; 在通過 USB 線把 android 設備連接到開發機上時&#xff0c; 僅僅是 ”物理上的連接”。 這時候 adb 是無法識別到 android 設備的。 需要…

NOI 2025 大綱更新:算法競賽的新風向標

《NOI 2025 大綱更新&#xff1a;算法競賽的新風向標》 在信息學奧林匹克競賽&#xff08;NOI&#xff09;的賽場上&#xff0c;每一次大綱的更新都如同一場風暴的前奏&#xff0c;它預示著競賽知識體系的變革&#xff0c;也引領著選手們備戰的方向。2025 年的 NOI 大綱已經正…

Spring Boot 集成 Solr 的詳細步驟及示例

環境準備 安裝 Solr &#xff1a;從 Solr 官網&#xff08;Welcome to Apache Solr - Apache Solr&#xff09;下載并安裝最新版本&#xff0c;然后通過命令 bin/solr start 啟動 Solr 服務&#xff0c;使用 bin/solr create -c mycore 創建一個新的 Solr 核心。 安裝 JDK &am…

【自然語言處理與大模型】LlamaIndex的數據連接器和對話引擎

LlamaIndex 是領先的開發框架&#xff0c;專為結合大型語言模型&#xff08;LLM&#xff09;與個性化工作流打造高效的數據驅動型智能代理而設計。一般我們用它來做RAG檢索增強生成。 &#xff08;1&#xff09;RAG的介紹 大型語言模型&#xff08;LLM&#xff09;雖然在海量數…

【實戰教程】React Native項目集成Google ML Kit實現離線水表OCR識別

前言 在移動應用開發中&#xff0c;OCR&#xff08;光學字符識別&#xff09;技術廣泛應用于各類場景。本文將詳細介紹如何在React Native項目中集成Google ML Kit&#xff0c;實現離線水表數字識別功能。全程使用TypeScript&#xff0c;并針對React Native 0.74版本進行適配&a…

全球化電商平臺AWS云架構設計

業務需求&#xff1a; 支撐全球三大區域&#xff08;北美/歐洲/亞洲&#xff09;用戶訪問&#xff0c;延遲<100ms處理每秒50,000訂單的峰值流量混合云架構整合本地ERP系統全年可用性99.99%滿足GDPR和PCI DSS合規要求 以下是一個體現AWS專家能力的全球化電商平臺架構設計方…

jupyter notebook運行簡單程序

一. 使用 cmd 創建虛擬環境 1.創建虛擬環境 &#xff08;1&#xff09;創建新的虛擬環境&#xff08;本項目名設置為zhineng&#xff09;&#xff0c;并設置python版本 conda create -n zhineng python3.6 &#xff08;2&#xff09;查看python版本 python --version &am…

【計算機視覺】語義分割:MMSegmentation:OpenMMLab開源語義分割框架實戰指南

深度解析MMSegmentation&#xff1a;OpenMMLab開源語義分割框架實戰指南 技術架構與設計哲學系統架構概覽核心技術特性 環境配置與安裝指南硬件配置建議詳細安裝步驟環境驗證 實戰全流程解析1. 數據集準備2. 配置文件定制3. 模型訓練與優化4. 模型評估與推理 核心功能擴展1. 自…

計算機圖形學編程(使用OpenGL和C++)(第2版)學習筆記 01.環境搭建

計算機圖形學編程(使用OpenGL和C)(第2版) 這是我學習計算機圖形學編程(使用OpenGL和C)的筆記&#xff0c;主要記錄學習心得及一些學習過程中遇到的問題和解決方案。源代碼存放在github上。 參考資料&#xff1a; 原書資源(程序代碼、模型、紋理、貼圖及圖表)下載ShaderToy學習…

代碼隨想錄算法訓練營第三十二天

LeetCode/卡碼網題目: 518. 零錢兌換 II377. 組合總和 Ⅳ790. 多米諾和托米諾平鋪(每日一題)57. 爬樓梯&#xff08;第八期模擬筆試&#xff09; 其他: 今日總結 往期打卡 背包問題特點: 滾動數組背包遍歷順序 完全背包從小到大,即基于當前物品更新過的繼續更新01背包從大到…

第十六屆藍橋杯 2025 C/C++組 密密擺放

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 思路詳解: 發個牢騷&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; P12337 [藍橋杯 2025 省 AB/Python B 第二…

分析rand()和srand()函數的功能

rand()和srand()函數原型&#xff1a; int rand(void) 返回一個范圍在 0 到 RAND_MAX 之間的偽隨機數。 void srand(unsigned int seed)用來給rand() 設置隨機數發生器&#xff0c;隨機數發生器輸出不同的數值&#xff0c;rand() 就會生成不同的隨機數 1)、在“D:\Keil_v5\AR…

debuginfo詳解

debuginfo 是 Linux 系統中存儲調試符號和源代碼信息的特殊軟件包&#xff0c;用于分析內核或用戶態程序的崩潰轉儲文件&#xff08;如 vmcore、coredump&#xff09;。它在調試復雜問題&#xff08;如內核崩潰、程序段錯誤&#xff09;時至關重要。以下是其核心作用、安裝方法…

Python 爬取微店商品列表接口(item_search)的實戰指南

在電商數據分析、市場調研或競品分析中&#xff0c;獲取商品列表信息是常見的需求。微店作為知名的電商平臺&#xff0c;提供了豐富的商品資源和相應的 API 接口。本文將詳細介紹如何使用 Python 爬蟲技術&#xff0c;通過微店的 item_search 接口根據關鍵詞搜索商品列表&#…