編程之美2.13子數組的最大乘積

題目:

給定一個長度為N的數組,只許用乘法,不許用除法,計算任意(N-1)個數的組合中乘積最大的一個組,并寫出算法的時間復雜度。

如果把所可能的乘積找出來,共有(N-1)個數,n個n-1的數的組合,時間復雜度為O(N^2)。

解法一:

在一個數組中,以i為界限,分別計算i前面s[i-1]的積,后面t[i+1]的積

p[i]=s[i-1]*t[i+1]即為這個數組中除去i的所有數的乘積。

時間復雜度為,從頭到尾和從尾到頭遍歷數組得到s[]和t[]的時間,加上p[]的時間3N,加上查找最大值的時間復雜度,最后總得時間復雜度為O(n)。

注意在代碼編寫的過程中,因為若干個數的乘積較大,需要把數組定義為longlong型。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 #define MAXN 1000
 6 
 7 long long A[MAXN];
 8 long long s[MAXN];
 9 long long t[MAXN];
10 long long p[MAXN];
11 
12 int main()
13 {
14     int n, i;
15     cin >> n;
16     for (i=1; i<=n; i++)
17         cin >> A[i];
18     // 從前往后用疊乘法
19     s[0] = 1;
20     for (i=1; i<n; i++)
21         s[i]=A[i]*s[i-1];
22     // 從后往前用疊乘法
23     t[n+1] = 1;
24     for (i=n; i>1; i--)
25         t[i]=A[i]*t[i+1];
26     // 計算出n-1個n-1數連乘
27     for (i=0; i<=n-1; i++)
28         p[i] = s[i]*t[i+2];
29     long long maximum = p[0];
30     // 獲取其中的最大值
31     for (i=1; i<=n-1; i++)
32         maximum = max(maximum, p[i]);
33     cout <<"max is "<< maximum << endl;
34 }

?

解法二

近一步分析,假設N個整數的乘積為P,從P的正負性下手。

1.P=0;數組中至少含一個0。除去一個0,其他N-1個數的乘積為Q

  Q=0;數組中至少2個0;所以N-1的乘積依然為0;

  Q>0;用0替換N-1中的任意一個數,得出的Pn-1=0,所以最大值為Q;

  Q<0;用0替換N-1中的任意數,Pn-1=0,最大值為0;

2.P<0

  如果去除數組中的一個負數,剩下的n-1個數的乘積為正,去掉絕對值最小的負數得到的n-1個數最大。

3.P>0

  去掉數組匯總最小的正數值,如果沒有正數都是負數,取出絕對值最大的負數值。

?

判斷正負的過程,一般不使用所有數據直接相乘的操作,因為數據的值可能過大,有溢出的危險,所以可以通過判斷數組中,正數,負數,零的個數。遍歷一次數組,即可得到這些數據,還有絕對值最大最小的正負數。時間復雜度為O(N)。

轉載于:https://www.cnblogs.com/SeekHit/p/5206790.html

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

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

相關文章

[SceneKit專題]11-Reference-Nodes引用節點

說明 本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會 此書對應的代碼地址 SceneKit系列文章目錄 本文將完成一個完整的node節點,帶有完整貼圖,并將其導入其他場景中,成為其中的一個引用節點.這樣可以更方便的組織場景,并能復用場景中的節點,正類似于面…

scapy 安裝及簡單測試

關于scapy Scapy的是一個強大的交互式數據包處理程序&#xff08;使用python編寫&#xff09;。它能夠偽造或者解碼大量的網絡協議數據包&#xff0c;能夠發送、捕捉、匹配請求和回復包等等。它可以很容易地處理一些典型操作&#xff0c;比如端口掃描&#xff0c;tracerouting&…

MoveAbsJ在使用時和MOVEJ有什么區別

問 題&#xff1a; MoveAbsJ在使用時和MOVEJ有什么區別 回 答&#xff1a; MoveAbsJ的目標點是用六個軸伺服電機的偏轉角度值來指定的。 MOVEJ和MOVEL的目標點是用坐標系X Y Z的值來指定的。

Python中的序列操作

Python中的序列操作 分類: python undefined 官方手冊&#xff1a;https://docs.python.org/3.7/library/stdtypes.html#sequence-types-list-tuple-range 序列簡介 序列是指按照位置順序來存儲數據的數據結構&#xff0c;也就是說能通過數值索引進行操作。實際上&#x…

automaticallyAdjustsScrollViewInsets的作用

簡單點說就是automaticallyAdjustsScrollViewInsets根據按所在界面的status bar&#xff0c;navigationbar&#xff0c;與tabbar的高度&#xff0c;自動調整scrollview的 inset,設置為no&#xff0c;不讓viewController調整&#xff0c;我們自己修改布局即可~轉載于:https://ww…

JavaScript 基礎知識 - BOM篇

前言 本篇文章是JavaScript基礎知識的BOM篇&#xff0c;如果前面的《JavaScript基礎知識-DOM篇》看完了&#xff0c;現在就可以學習BOM了。 注意&#xff1a; 所有的案例都在這里鏈接: 提取密碼密碼: yvxo&#xff0c;文章中的每個案例后面都有對應的序號。 1. BOM 基本概念 B…

全球首例機器人自殺事件 因受夠無聊家務

據鳳凰網,一個奧地利家庭購買一小機器人,每天工作就是倒垃圾、倒垃圾。一天完工后,它竟自己啟動,爬到爐邊&#xff0c;推開上面的鍋&#xff0c;把自己活活燒死…專家稱這個機器人實在受夠了無聊的家務瑣事&#xff0c;才毅然選擇自殺機器人也是有尊嚴的!為這有骨氣的robot點根…

【python基礎】——數據類型(列表、字典、集合)

駿馬金龍——python語法基礎 python基礎 變量與運算 符號//%**意義整除整除取余冪次方數據種類 #mermaid-svg-7nSRRijcYFCYwTDr .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-7nSRRijcYFCYw…

linux命令:mkdir命令

命令參數&#xff1a; -m, --mode模式&#xff0c;設定權限<模式> (類似 chmod)&#xff0c;而不是 rwxrwxrwx 減 umask -p, --parents 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項后,系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄; …

js設置奇偶行數樣式

$(document).ready(function () {odd { "background": "none" }; //奇數樣式 even { "background": "#f3f3f3" }; //偶數樣式 odd_even(".gys_xq", odd, even);});function odd_even(id, odd, even) {$(id).find("…

貝塞爾曲線切割圓角

ios 系統框架已經給我們提供了相應的切割圓角的方法, 但是如果在一個見面有很多控件切割的話會出現卡頓和個別不切的現象 ?123456789101112131415161718192021222324252627/* 創建一個Button */UIButton * button [UIButton buttonWithType:(UIButtonTypeSystem)];[button se…

機器人實現屠宰自動化

當 WESTFLEISCH 注冊合作社考慮在 Coesfeld 肉類加工中心內自動化原有的人工屠宰設備過程時&#xff0c;首先在“剔除直腸”及“切開盆腔骨及腹部”兩個流程中測試使用了兩臺庫卡機器人。在此過程中&#xff0c;機器人主要以它工作的質量及經濟效益說服了使用者。 實施措施/解…

DOM編程藝術12章

在submit.html中&#xff0c;代碼簡略成如下也行 <article><h1>Thanks!</h1><p>Thanks for contacting us. Well get back to you as soon as we can.</p></article> </body> </html> 說明了只是插入article的部分&#xff0c…

python數據結構《排序專題復習》

目錄 常見的三種排序方法 冒泡排序 插入排序 選擇排序 其他經典的排序方法 快速排序 堆排序 歸并排序 希爾排序 不同排序方法的各維度對比 排序方式的穩定性&#xff1a;若兩個相同的元素在排序前后的相對位置不發生改變的排序為穩定排序&#xff0c;否則不穩定排序 常…

BZOJ2844 albus就是要第一個出場

AC通道&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id2844 這題貌似HDU上有一道差不多的題&#xff0c;不過我沒做過&#xff0c;也就沒管了。 首先講一個線性基的東西&#xff0c;大概就是這樣&#xff1a; 然后就是一個什么性質&#xff1a;S異或起來會出現重…

HTG Explains: Why Linux Doesn’t Need Defragmenting

If you’re a Linux user, you’ve probably heard that you don’t need to defragment your Linux file systems. You’ll also notice that Linux distributions don’t come with disk-defragmenting utilities. But why is that? To understand why Linux file systems d…

Spring AOP 實戰運用

Spring AOP 實戰 看了上面這么多的理論知識, 不知道大家有沒有覺得枯燥哈. 不過不要急, 俗話說理論是實踐的基礎, 對 Spring AOP 有了基本的理論認識后, 我們來看一下下面幾個具體的例子吧.下面的幾個例子是我在工作中所遇見的比較常用的 Spring AOP 的使用場景, 我精簡了很多有…

VC Ws2_32.lib

該庫對應WS2_32.DLL&#xff0c;提供了對以下網絡相關API的支持&#xff0c;若使用其中的API&#xff0c;則應該將ws2_32.lib加入工程&#xff08;否則要動態載入WS2_32.DLL&#xff09;。acceptbindcloseSOCKETconnectgetpeernamegetsocknamegetsockopthtonlhtonsioctlsocketi…

大話設計模式之策略模式

第二章&#xff1a;商場促銷——策略模式 策略模式的定義:策略模式是一種定義一系列算法的方法&#xff0c;從概念上來看&#xff0c;所有這些算法完成的都是相同的工作&#xff0c;知識實現不同&#xff0c;他可以以相同的方式調用所有的算法&#xff0c;減少了各類算法類與使…

【Python學習】——語言風格(變量賦值、深淺拷貝、for循環陷阱)

目錄 1、賦值 2、賦值的分類——引用賦值、值賦值 1) 不可變對象引用賦值——字符串、數值、元組等 2&#xff09;可變對象引用賦值——列表、集合、字典 3&#xff09;可變與不可變對象的引用賦值內部分析 4&#xff09;在py文件中&#xff0c;和作用域有關&#xff0c;如…