亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java乘積題舉例分析

發布時間:2021-11-17 16:33:19 來源:億速云 閱讀:140 作者:iii 欄目:web開發

本篇內容介紹了“Java乘積題舉例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

面試題:顛倒乾坤

在一棵二叉搜索樹中,有兩個節點顛倒了順序。要求實現一個算法,在不改變樹結構的前提下,恢復正確的二叉搜索樹。給出一個空間為O(n)的實現很容易,那該如何給出一個空間O(1)的實現呢?

忘我之乘積分析

題目:

給你一個數組A[1..n],請你在O(n)的時間里構造一個新的數組B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法運算。

分析:

看到題目,不要緊張,要頭腦清晰,看穿面試官的本意,實際上,他是用除法公式,但又要求不用除法來迷惑你。

要求在不使用除法的情況下計算B[i]=A[0]*…*A[n]/A[i],簡單變換一下形式,即可得到B[i]=A[0]*…*A[i-1]*A[i+1]*…*A[n],一共n-1次乘法。每一個B[i]計算一遍,總的時間復雜度為O(n^2)。不符合題目要求,必須減少乘法的次數。如何減少乘法的次數呢? 繼續分析,通過上面的變換,我們可以得到B[i]是由兩部分相乘得到的:

A[0]*…*A[i-1]   A[i+1]*…*A[n]

先看***部分,在計算B[i+1]的時候,是可以利用B[i]的***部分結果的,只需要乘以A[i]即得到B[i+1]的***部分。

第二部分同理,計算完A[i+1]*…*A[n],再計算A[i]*A[i+1]*…*A[n],只需要乘以A[i]即可。A[i]*A[i+1]*…*A[n]B[i-1]的第二部分。

由此分析,構建兩個新的數組:C和D(為了方便解釋,用了兩個數組),

C[i] = A[0]*…*A[i-1] = C[i-1]*A[i-1]   D[i] = A[i+1]*…*A[n] = D[i+1]*A[i+1}

構建C和D都是O(n)的時間復雜度(C從前到后遍歷一遍數組,D從后到前遍歷一邊數組),然后,B[i] = C[i]*D[i]也是O(n)的時間復雜度。整體算法的時間復雜度是O(n)

題目到這解答完畢。

但是面試官的問題還沒有完,他們會繼續問,這個解法的空間是O(n)的,能夠空間O(1)的情況下實現么?

首先看看一個只有5個數的數組,A[1],A[2],A[3],A[4],A[5]

首先從頭到尾遍歷:

B[1] = A[1] B[2] = B[1]*A[2] B[3] = B[2]*A[3] B[4] = B[3]*A[4] B[5] = B[4], 臨時變量 C=A[5]

然后從尾到頭遍歷:

B[4] = B[3]*C, C=C*A[4] B[3] = B[2]*C, C=C*A[3] B[2] = B[1]*C, C=C*A[2] B[1] = C

通過這個小的例子,我們得到了算法,然后可以推廣到任意多的元素。這個是面試中常用的技巧。

“Java乘積題舉例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宽甸| 和林格尔县| 阿拉善盟| 杭州市| 瓦房店市| 古田县| 海阳市| 陕西省| 绵竹市| 临潭县| 长治市| 松溪县| 蕲春县| 西安市| 民丰县| 寻甸| 扬州市| 渑池县| 永嘉县| 鸡西市| 杨浦区| 青冈县| 叶城县| 永顺县| 顺昌县| 建昌县| 龙陵县| 将乐县| 三明市| 扎赉特旗| 托克托县| 延吉市| 平安县| 栖霞市| 邛崃市| 农安县| 安乡县| 元朗区| 辽中县| 祁门县| 湘乡市|