除自身以外數組的乘積(c語言詳解)

題目:除自身外數組的乘積

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

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

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

提示:

?2 <= nums.lengh <= 10^5

-30 <= nums[i] <= 30

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

示例 1:

輸入:nums=[ 1,2,3,4 ]

輸出:[ 24,12,8,6 ]

示例 2:

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

輸出:[ 0,0,9,0,0 ]

解題思路:

定義兩個數組(前綴乘積數組與后綴乘積數組),前綴數組為:left [ ] ,后綴數組:right [ ] ;

left [ i ] 里存 nums [ i ] 前面的乘積和,righ[ i ] 里存 nums [ i ] 后面的乘積和,(為空時存1);

創建一個動態內存變量 int* ret=(int*)malloc(sizeof(int)*numsSize);

然后ret [ i ]=left [ i ] * right [ i ],存儲后返回;

思路實現:

因為數組元素 2 <= nums.lengh <= 10^5

所以前綴和后綴數組申請的數組大小都是10^5;

int left[100000]={0};
int right[100000]={0};

然后就是遍歷求前綴乘積數組的各項值:

    //前綴乘積和for(i=0;i<numsSize;i++){if(i==0){left[i]=1;}else{left[i]=left[i-1]*nums[i-1];}}

解析:

這里呢用數組 nums?[ 1,2,3,4,5,6 ] 來舉例;?

此時,left [ 0 ] =1,然后 left [ 1 ] = left [ 0 ] * nums [ 0 ]? 相當于?left [ 1 ] = nums [ 0 ] ;

left [ 2 ] = left [ 1 ] * nums [ 1 ]? 相當于 left [ 2 ] = nums [ 0 ] * nums [ 1 ] ;

left [ 3?] = left [ 2?] * nums [ 2?]? 相當于 left [ 3?] = nums [ 0 ] * nums [ 1 ] * nums [ 2?] ;

。。。。。。

left [ 5?] = left [ 4?] * nums [ 4?]? 相當于 left [ 5?] = nums [ 0 ] * nums [ 1 ] * nums [ 2?] *?nums [ 3?] * nums [ 4?] ;

想必大家也已經找到其中的規律了;

然后就是遍歷求后綴乘積數組的各項值:

   //后綴乘積和for(i=numsSize-1;i>=0;i--){if(i==numsSize-1){right[i]=1;}else{right[i]=right[i+1]*nums[i+1];}}

解析:

同理:nums?[ 1,2,3,4,5,6 ]

left [ 5?] =1,然后 left [ 4?] = left [ 5 ] * nums [ 5?]? 相當于?left [ 4?] = nums [ 5?] ;

left [ 3?] = left [ 4?] * nums [ 4?]? 相當于 left [ 3?] = nums [ 4?] * nums [ 5?] ;

left [ 2?] = left [ 3?] * nums [ 3?]? 相當于 left [ 2?] = nums [ 3?] * nums [ 4?] * nums [ 5?] ;

。。。。。。

left [ 0?] = left [ 1?] * nums [ 1?]? 相當于 left [ 0?] = nums [ 1?] * nums [ 2?] * nums [ 3?] *?nums [ 4?] * nums [ 5?] ;

然后就是給返回值(* returnSize)賦值,以及創建動態內(ret),以及給其賦值再返回;

    * returnSize=numsSize;int* ret=(int*)malloc(4*numsSize);//給返回指針賦值for(i=0;i<numsSize;i++){ret[i]=left[i]*right[i];}

時間復雜度為(O(N) ) ;

這就是這道題目的基本思路,下面是程序源代碼:

int* productExceptSelf(int* nums, int numsSize, int* returnSize){int i=0;int left[100000]={0};int right[100000]={0};//前綴乘積和for(i=0;i<numsSize;i++){if(i==0){left[i]=1;}else{left[i]=left[i-1]*nums[i-1];}}//后綴乘積和for(i=numsSize-1;i>=0;i--){if(i==numsSize-1){right[i]=1;}else{right[i]=right[i+1]*nums[i+1];}}* returnSize=numsSize;int* ret=(int*)malloc(4*numsSize);//給返回指針賦值for(i=0;i<numsSize;i++){ret[i]=left[i]*right[i];}return ret;
}

如有不足歡迎來補充交流!

完結。。


????????

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

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

相關文章

Android Studio實現解析HTML獲取圖片URL,將URL存到list,進行瀑布流展示

目錄 效果展示build.gradle(app)添加的依賴(用不上的可以不加)AndroidManifest.xml錯誤代碼activity_main.xmlitem_image.xmlMainActivityImage適配器ImageModel 接收圖片URL效果展示 build.gradle(app)添加的依賴(用不上的可以不加) dependencies {implementation co…

Android 13 像Settings一樣開啟關閉深色模式

一.背景 由于客戶定制的Settings需要開啟關閉深色模式,所以需要自己調用開啟關閉深色模式 二.前提條件 首先應用肯定要是系統應用,并且導入framework.jar包,具體可以參考: Android 應用自動開啟輔助(無障礙)功能并使用輔助(無障礙)功能_android 自動開啟無障礙服務_龔禮鵬…

Java版電子招投標管理系統源碼-電子招投標認證服務平臺-權威認證 tbms

? 功能描述 1、門戶管理&#xff1a;所有用戶可在門戶頁面查看所有的公告信息及相關的通知信息。主要板塊包含&#xff1a;招標公告、非招標公告、系統通知、政策法規。 2、立項管理&#xff1a;企業用戶可對需要采購的項目進行立項申請&#xff0c;并提交審批&#xff0c;…

Neo4j之CREATE基礎

在 Neo4j 中&#xff0c;CREATE 語句用于創建節點、關系以及節點屬性。 創建節點&#xff1a; CREATE (p:Person {name: John, age: 30});這個查詢會創建一個具有 "Person" 標簽的節點&#xff0c;節點屬性包括 "name" 和 "age"。 創建帶有關…

【java畢業設計】基于Spring Boot+Vue+mysql的論壇管理系統設計與實現(程序源碼)-論壇管理系統

基于Spring BootVuemysql的論壇管理系統設計與實現&#xff08;程序源碼畢業論文&#xff09; 大家好&#xff0c;今天給大家介紹基于Spring BootVuemysql的論壇管理系統設計與實現&#xff0c;本論文只截取部分文章重點&#xff0c;文章末尾附有本畢業設計完整源碼及論文的獲取…

創建遠程倉庫以及分支

1、 創建遠程倉庫 這里有兩種方式 1.1 利用git的插件有Gitee、GitHub。 來到 GitHub 中發現已經幫我們創建好了 gitTest 的遠程倉庫。 1.2 通過Push的方式推送本地庫到遠程庫 這種方式需要提前創建好倉庫。 右鍵點擊項目&#xff0c;可以將當前分支的內容 push 到 GitHub 的遠…

Python爬蟲——scrapy_工作原理

引擎向spiders要url引擎把將要爬取的url給調度器調度器會將url生成的請求對象放入到指定的隊列中從隊列中出隊一個請求引擎將請求交給下載器進行處理下載器發送請求獲取互聯網數據下載器將數據返回給引擎引擎將數據再次給到spidersspiders通過xpath解析該數據&#xff0c;得到數…

vue3+ts+tsx的使用與好處(語法方面:tsx==jsx)

前言&#xff1a; 整理分享下vue3tstsx相關的資料&#xff0c;有react使用經驗的小伙伴應該更能理解這個的好處&#xff0c;終于在vue3中也支持了&#xff0c;相當于函數的方法來操作界面。 1、vue3項目中為什么要用tsx&#xff08;等同于我們react的jsx&#xff09; 類型安全…

【STM32】 工程

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介紹&#xff1a;"謓澤"正在路上朝著"攻城獅"方向"前進四" &#x1f50e;&#x1f3c5; 榮譽&#xff1a;2021|2022年度博客之星物聯網與嵌入式開發TOP5|TOP4、2021|2022博客之星TO…

oracle 更新語句條件匹配不生效

最近在工作中寫了一個供別人調用的Oracle的存儲過程接口&#xff0c;功能很簡單&#xff0c;就是根據傳入的幾個參數來更新表中的某些數據&#xff0c;但是在聯調過程中傳入的更新匹配條件和被更新的數據一致對不上&#xff0c;更新的數據會比匹配的三個條件的數據多&#xff0…

注解 @Slf4j

注解 Slf4j 1. 注解由來&#xff1a; Slf4j 是 Lombok 提供的一種注解&#xff0c;用于在類中自動生成一個名為 log 的日志對象。通過使用 Slf4j 注解&#xff0c;可以方便地在代碼中使用日志功能&#xff0c;而無需手動創建和初始化日志對象。 2. 注解示例&#xff1a; Slf…

Spring系列篇--關于AOP【面向切面】的詳解

目錄 一.AOP是什么 二.案例演示 1.前置通知1.1 先準備接口 1.2然后再準備好實現類 1.3對我們的目標對象進行JavaBean配置 1.4 編寫前置系統日志通知 1.5配置系統通知XML中的JavaBean 1.6 配置代理XML中的JavaBean 1.7 測試代碼開始測試 注意這里有一個報錯問題&…

JVM虛擬機:初始化的介紹

本文重點 我們前面學習了三個步驟: 裝載 連接 初始化 初始化 初始化的時候,會為靜態成員變量賦值初始值,它有兩種方式: ①聲明類變量是指定初始值 ②使用靜態代碼塊為類變量指定初始值 例子 最后輸出的結果為3,它的過程是這樣的: main方法中輸出T.count,由于count是…

自簽證書讓Chrome信任的方式

自簽證書讓Chrome信任的方式(域名情況) 網站是搭建在linux上的&#xff0c;內容大概是一個code-server;我要在windows的chrome中訪問&#xff0c;在Linux機器上自簽了一個證書&#xff0c;準備讓windows中的chrome信任。linux裝好openssl。首先買好域名&#xff0c;配置好解析…

tkinter+爬蟲+pygame實現音樂播放器

文章目錄 前文安裝模塊示意圖爬蟲完整代碼pygametkinter完整代碼結尾前文 本文將涉及爬蟲(數據的獲取),pygame(音樂播放器),tkinter(界面顯示),將他們匯聚到一起制造一個音樂播放器,歡迎大家的訂閱。 安裝模塊 pip install requests,parsel,lxpy,pygame 示意圖

Flask下載文件報錯304 NOT MODIFIED

文章目錄 問題描述解決方案參考文獻 問題描述 前端 Vue 下下來的文件無法正常打開&#xff0c;大小比正常的略大一點&#xff0c;通過 Postman 直接調用是正常的 解決方案 由前端解決 如果響應大小比文件略大一點&#xff0c;從 responses 中取出關鍵數據再組成文件如果響應…

open cv學習 (二)色彩空間和通道

色彩空間和通道 demo1 import cv2hsv_image cv2.imread("./img.png")cv2.imshow("img", hsv_image) hsv_image cv2.cvtColor(hsv_image, cv2.COLOR_BGR2HSV) h, s, v cv2.split(hsv_image) cv2.imshow("B", h) cv2.imshow("G", s…

文本圖片怎么轉Excel?分享一些好用的方法

在處理數據時&#xff0c;Excel 是一個非常強大的工具&#xff0c;但有時候需要將文本和圖片轉換為 Excel 格式&#xff0c;這可能會讓人感到困惑。在本文中&#xff0c;我們將介紹一些好用的方法&#xff0c;以便您能夠輕松地將文本和圖片轉換成 Excel 格式。 將文本圖片為Exc…

部署piwigo網頁 通過cpolar分享本地電腦上的圖片

通過cpolar分享本地電腦上有趣的照片&#xff1a;發布piwigo網頁 文章目錄 通過cpolar分享本地電腦上有趣的照片&#xff1a;發布piwigo網頁前言1. 設定一條內網穿透數據隧道2. 與piwigo網站綁定3. 在創建隧道界面填寫關鍵信息4. 隧道創建完成 總結 前言 首先在本地電腦上部署…