從零學算法238

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 <= 10^5
-30 <= nums[i] <= 30
保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內
進階:你可以在 O(1) 的額外空間復雜度內完成這個題目嗎?( 出于對空間復雜度分析的目的,輸出數組 不被視為 額外空間。)

  • 我們最容易想到的就是先求出所有數的乘積,然后用乘積除以每個數即可,但是題目要求不用除法。那我們肯定是用乘法,我們在求某個元素對應的結果時,只要有左邊數組的乘積和右邊數組的乘積,兩數相乘就是答案,所以我們用兩個數組記錄,left[i] 表示下標為 i 元素左邊數組的乘積,right[i] 表示下標為 i 元素右邊數組的乘積。
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] left = new int[n];// 首位元素左邊沒數字,所以乘積默認為 1left[0] = 1;int[] right = new int[n];// 同理末尾元素右邊沒數字,所以乘積默認為 1right[n-1] = 1;// 獲取每個元素左邊所有元素的乘積for(int i=1;i<n;i++){left[i]=left[i-1]*nums[i-1];}// 獲取每個元素右邊所有元素的乘積for(int i=n-2;i>=0;i--){right[i] = right[i+1]*nums[i+1];}int[] res = new int[n];// 每個元素對應結果等于左右乘積相乘for(int i=0;i<n;i++){res[i]=left[i]*right[i];}return res;}
    
  • 那其實我們在獲取每個元素右邊的乘積的時候,每獲得一個其實就能得到一個元素對應的結果了,所以可以合并第 2,3 個 for 循環
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] left = new int[n];// 首位元素左邊沒數字,所以乘積默認為 1left[0] = 1;int[] right = new int[n];// 同理末尾元素右邊沒數字,所以乘積默認為 1right[n-1] = 1;// 獲取每個元素左邊所有元素的乘積for(int i=1;i<n;i++){left[i]=left[i-1]*nums[i-1];}// 獲取每個元素右邊所有元素的乘積// 同時獲得該元素對應的結果int[] res = new int[n];// 該元素最右邊的結果其實就是左邊所有數的乘積res[n-1] = left[n-1];for(int i=n-2;i>=0;i--){right[i] = right[i+1]*nums[i+1];res[i]=left[i]*right[i];}return res;}
    
  • 上面在獲取右乘積時我們會發現,其實我們的每個 right[i] 只和他的前一個乘積有關,那我們都不需要數組,用一個變量不斷更新即可
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] left = new int[n];left[0] = 1;for(int i=1;i<n;i++){left[i]=left[i-1]*nums[i-1];}int[] res = new int[n];int right = 1;for(int i=n-1;i>=0;i--){res[i] = left[i]*right;right*=nums[i];}return res;}
    
  • 題目最后說能否用 O(1) 的額外空間,結果數組 res 不算,那你直接把 res 當做 left 用即可
  •   public int[] productExceptSelf(int[] nums) {int n = nums.length;int[] res = new int[n];res[0] = 1;for(int i=1;i<n;i++){re[i]=res[i-1]*nums[i-1];}int right = 1;for(int i=n-1;i>=0;i--){res[i] *= right;right*=nums[i];}return res;}
    

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

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

相關文章

Python自動化UI測試之Selenium基礎實操

1. Selenium簡介 Selenium 是一個用于 Web 應用程序測試的工具。最初是為網站自動化測試而開發的&#xff0c;可以直接運行在瀏覽器上&#xff0c;支持的瀏覽器包括 IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Googl…

SVN忽略已提交的文件(ignore,移出版本控制)

本文適用于已安裝TortoiseSVN客戶端的同學。 1、右鍵點擊要忽略的文件夾或文件&#xff0c;鼠標移到“TortoiseSVN”&#xff0c;找到“Unversion and add to ignore list”&#xff0c;選擇文件夾&#xff0c;彈出提示框確認忽略。 2、設置完忽略文件后&#xff0c;還需要做…

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型 目錄 多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.多維時序 | Matlab實現GRU-MATT門控循環單元融…

【Maven】介紹、下載及安裝、集成IDEA

目錄 一、什么是Maven Maven的作用 Maven模型 Maven倉庫 二、下載及安裝 三、IDEA集成Maven 1、POM配置詳解 2、配置Maven環境 局部配置 全局設置 四、創建Maven項目 五、Maven坐標詳解 六、導入Maven項目 方式1&#xff1a;使用Maven面板&#xff0c;快速導入項目 …

React Native框架開發介紹,以及其優點

大家好&#xff0c;我是咕嚕鐵蛋&#xff0c;在今天的文章中&#xff0c;我通過科技手段和大家一起探討一下React Native框架的開發介紹以及其優點。我深知選擇合適的開發工具對于項目的成功至關重要。而React Native作為一款流行的跨平臺移動應用開發框架&#xff0c;其獨特之…

Linux并發與競爭的基本概念

一. 簡介 Linux是一個多任務操作系統&#xff0c;肯定會存在多個任務共同操作同一段內存或者設備的情況&#xff0c; 多個任務甚至中斷都能訪問的資源叫做共享資源&#xff0c;在驅動開發中要注意對共享資源的保護&#xff0c;也就是要處理對共享資源的并發訪問。比如&#xf…

【服務器數據恢復】FreeNAS+ESXi虛擬機數據恢復案例

服務器數據恢復環境&#xff1a; 一臺服務器通過FreeNAS&#xff08;本案例使用的是UFS2文件系統&#xff09;實現iSCSI存儲&#xff0c;整個UFS2文件系統作為一個文件掛載到ESXi虛擬化系統&#xff08;安裝在另外2臺服務器上&#xff09;上。該虛擬化系統一共有5臺虛擬機&…

2024水科技大會暨技術裝備成果展覽會——高品質供水和飲用水水源安全保障論壇

供水與飲水安全直接關系到人民群眾的生活與健康&#xff0c;切實做好城市供水與飲水安全保障工作&#xff0c;是把以人為本真正落到實處的一項緊迫任務。近年來&#xff0c;中央和地方加大了城鄉供水與飲水安全保障工作的力度&#xff0c;對標最優質供水城市建設要求&#xff0…

[Angular 基礎] - service 服務

[Angular 基礎] - service 服務 之前的筆記就列舉三個好了……沒想到 Angular 東西這么多(&#xff70; &#xff70;;)……全加感覺越來越湊字數了 [Angular 基礎] - 視圖封裝 & 局部引用 & 父子組件中內容傳遞 [Angular 基礎] - 生命周期函數 [Angular 基礎] - 自…

請簡述你對SpringMVC的理解

SpringMVC是一種基于Java語言開發&#xff0c;實現了WebMVC設計模式&#xff0c;請求驅動類型 的輕量級Web框架。 采用了MVC架構模式的思想&#xff0c;通過把Model&#xff0c;View&#xff0c;Controller分離&#xff0c;將Web層進 行職責解耦&#xff0c;從而把復雜的Web應…

idea打開項目白屏

解決方法&#xff1a; 右鍵“最大化” idea打開項目白板解決方案_idea打開白屏-CSDN博客 IDEA 2022 CPU占用100%的問題及解決方法_java_腳本之家

STM32控制數碼管從0顯示到99

首先 先畫電路圖吧&#xff01;打開proteus&#xff0c;導入相關器件&#xff0c;繪制電路圖。如下&#xff1a;&#xff08;記得要保存啊&#xff01;發現模擬一遍程序就自動退出了&#xff0c;有bug&#xff0c;我是解決不了&#xff0c;所以就是要及時保存&#xff0c;自己重…

計算機組成原理(10)----微程序控制器

目錄 1.微程序控制器的設計思想 2.微指令的基本格式 3.微程序控制器的基本結構 &#xff08;1&#xff09;控制存儲器CM &#xff08;2&#xff09;CMAR &#xff08;3&#xff09;地址譯碼 &#xff08;4&#xff09;CMDR &#xff08;5&#xff09;微地址形成部件 &…

31.云原生Istio可觀測性之官網Bookinfo應用實戰演示

云原生專欄大綱 文章目錄 可觀測性kiali介紹Overview&#xff08;概觀&#xff09;Application&#xff08;應用維度&#xff09;workloads&#xff08;負載維度&#xff09;Services&#xff08;服務維度&#xff09;Istio Config&#xff08;配置維度&#xff09; Kiali部署…

音頻聲波的主觀感受

一、響度 聲壓是“客觀”的&#xff0c;響度是“主觀”的。 響度又稱音量。人耳感受到的聲音強弱&#xff0c;它是人對聲音大小的一個主觀感覺量。響度的大小決定于聲音接收處的波幅&#xff0c;就同一聲源來說&#xff0c;波幅傳播的愈遠&#xff0c;響度愈小…

React18原理: React核心對象之Update、UpdateQueue、Hook、Task對象

Update 與 UpdateQueue 對象 1 ) 概述 在fiber對象中有一個屬性 fiber.updateQueue是一個鏈式隊列&#xff08;即使用鏈表實現的隊列存儲結構&#xff09;是和頁面更新有關的 2 &#xff09;Update對象相關的數據結構 // https://github.com/facebook/react/blob/v18.2.0/pa…

【Nginx】Nginx配置反向代理 和 https

nginx.conf配置 進入linux /etc/nginx/ 打開nginx.conf 進行以下配置 http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {#監聽443端口listen 443 ssl;#你的域名server_name huiblog.top;#ssl證書的pe…

VSCode The preLaunchTask ‘C/C++: clang++ 生成活動文件‘ terminated with exit code -1

更改tasks.json文件里面的type為shell 選擇g 選擇g&#xff0c;然后點回到text.c&#xff0c;按下F5. 得到結果。 文中內容參考: 從零開始手把手教你配置屬于你的VS Code_嗶哩嗶哩_bilibili https://blog.csdn.net/qq_63872647/article/details/128006861

【EasyV】QGIS轉換至EasyV

QGIS轉換至EasyV 第一步&#xff1a;導入QGIS第二步 坐標系轉換第三步 集合修正第四步 重命名字段第五步 導出WGS geojson坐標第六步 導入EasyV 第一步&#xff1a;導入QGIS 第二步 坐標系轉換 第三步 集合修正 第四步 重命名字段 第五步 導出WGS geojson坐標 第六步 導入EasyV…

【es6】模版字面量/模版字符串,標簽函數/String.raw()靜態方法

模版字符串經常用&#xff0c;但是這個標簽函數的功能你肯定不知道&#xff0c;請看官網文檔 看完你需要知道 可以自定義標簽函數String.raw 的用法 唯一一個內置的模版字符串標簽函數第一個參數具有 raw 屬性的對象&#xff0c;值時一個類數組字符串對象模版字面量的緩存機制…