LeetCode 面試題66. 構建乘積數組

来源:https://www.cnblogs.com/izhoujie/archive/2020/05/14/12891951.html
-Advertisement-
Play Games

我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題66. 構建乘積數組 題目 給定一個數組 A[0,1,… ...


我的LeetCode:https://leetcode-cn.com/u/ituring/

我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii

LeetCode 面試題66. 構建乘積數組

題目

給定一個數組 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]。不能使用除法。

示例:

輸入: [1,2,3,4,5]
輸出: [120,60,40,30,24]

提示:

  • 所有元素乘積之和不會溢出 32 位整數
  • a.length ⇐ 100000

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof 著作權歸領扣網路所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解題思路

思路1-錯位從前往後和從後往前連乘兩遍

思路解析:

  • 第一遍從i位置開始連乘,但是每次的乘積都給到新數組的i+1位置,遍歷完時最後的len-1位置已經得到最終結果,len-1前面的逐個缺少1,2,3,4...個其他位置的乘因數,但是已經避免了乘自己i位置的值;
  • 第二遍從i=len-1位置開始連乘,這次每次的乘積和新數組i-1位置的相乘作為新數組i-1位置的最後結果;

更清晰的理解:

  • 第一遍從前往後其實是計算了[0,i)的連乘作為i位置的結果;
  • 第二遍從後往前是計算(i,len-1]的連乘結果,那麼再與第一遍得到的i位置的結果相乘就是[0,len-1]不包含i位置的連乘結果了;

思路還是很清晰的哈~

演算法複雜度:

  • 時間複雜度: \({\color{Magenta}{\Omicron\left(n\right)}}\)
  • 空間複雜度: \({\color{Magenta}{\Omicron\left(1\right)}}\) 不包含結果數組所需空間

演算法源碼示例

package leetcode;

/**
 * @author ZhouJie
 * @date 2020年5月14日 下午10:23:21 
 * @Description: 面試題66. 構建乘積數組
 *
 */
public class LeetCode_Offer_66 {

}

class Solution_Offer_66 {
	/**
	 * @author: ZhouJie
	 * @date: 2020年5月14日 下午10:23:49 
	 * @param: @param a
	 * @param: @return
	 * @return: int[]
	 * @Description: 1-錯位連乘兩遍即可;
	 *
	 */
	public int[] constructArr(int[] a) {
		if (a.length < 2) {
			return a;
		}
		int len = a.length;
		int[] b = new int[len];
		int c = 1;
		for (int i = 0; i < len; i++) {
			b[i] = c;
			c *= a[i];
		}
		c = 1;
		for (int i = len - 1; i >= 0; i--) {
			b[i] *= c;
			c *= a[i];
		}
		return b;
	}
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (待續ing) 一、示例 超級無敵簡易版博客園: https://www.cnblogs.com/bigorangecc/p/12891419.html 二、小技巧解說 1、界面背景圖鎖定 【效果描述】: 背景圖固定不動(就像貼在 最底下的圖),其餘頁面內容可以在其上方正常翻動瀏覽(鏤空設計) 2、 ...
  • 一直以來,IT行業對技術的高要求讓人們把這個行業標簽為男生專屬,近些年隨著互聯網科技的發展與普及,很多女孩子發現原來IT技術沒有自己想象中難,而且還可以畢業拿高薪掌控自己的人生。女孩兒可以學IT而且很適合學IT,她們比男生更細心、有耐心,尤其思維的創新與關註細節的特質,讓她們在IT領域的優勢甚至超過 ...
  • 首先要知道換行符,如下: &#10 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div title="2020年5月14日&#10氣溫1 ...
  • # jQuery遍歷索引的方法 - 1.each() ```js $('li').each(function(index, ele){ $(ele).text(index).addClass('demo' + index); }); ``` - 2.children() ```js $('ul'). ...
  • 一、我們介紹幾個函數用於反編譯一個類​ package com.bjpowernode.java_learning; ​ public class D115_1_User { private String id; public int age; protected String addr; bool ...
  • 註:本筆記對應江灝老師在B站的教學視頻https://www.bilibili.com/video/BV1zE411V79p 1.1模塊 Python程式框架 將一個程式分割為源代碼文件的集合,以及將這些部分連接在一起的方法。 Python源代碼文件:*.py 一個py文件是一個模塊(moudle) ...
  • 一、Java概述 1、Java三大塊(三個不同的版本) Java的三個版本Java ME、Java SE、Java EE,並不是分隔的單獨的三大塊,從學習的角度來說,它們的關係類似於基礎、進階、高級,但也不完全是這個關係,通常學習都是先學習Java SE,然後再決定學習Java ME、Java EE ...
  • 告警信息: 13% building modules 28/40 modules 12 active ...dex=0!\src\App.vue{ parser: "babylon" } is deprecated; we now treat it as { parser: "babel" }. 9 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...