日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
除自身以外數(shù)組的乘積:三種解法及Java代碼示例

在處理數(shù)組相關(guān)的問題時,有時候需要計算除數(shù)組中某個元素以外的所有元素的乘積。這個問題可以通過多種方法解決。本文將首先給出題目的詳細(xì)描述,然后介紹三種解法,并提供相應(yīng)的Java代碼示例。最后,對每種解法進(jìn)行時間和空間復(fù)雜度的分析,幫助讀者評估解法的效率和性能。

創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計制作的專業(yè)網(wǎng)站制作公司,擁有經(jīng)驗豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計制作的站點(diǎn)1000多家。

題目描述

給定一個整數(shù)數(shù)組 nums,返回一個數(shù)組 output,其中 output[i] 等于除 nums[i] 之外的所有元素的乘積。

注意:請不要使用除法,且在 O(n) 時間復(fù)雜度內(nèi)完成此問題的解決。

示例:

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

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

解釋: 除了自身以外的乘積為:[2x3x4, 1x3x4, 1x2x4, 1x2x3] = [24, 12, 8, 6]

1. 解法一:暴力法

暴力法是最簡單直接的解法,即對于數(shù)組中的每個元素,都計算除自身以外的其他元素的乘積。具體步驟如下:

public int[] productExceptSelf(int[] nums) {
   int n = nums.length;
   int[] output = new int[n];
   
   for (int i = 0; i < n; i++) {
       int product = 1;
       for (int j = 0; j < n; j++) {
           if (i != j) {
               product *= nums[j];
          }
      }
       output[i] = product;
  }
   
   return output;
}

時間復(fù)雜度分析:

  • 外層循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 內(nèi)層循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 總體時間復(fù)雜度為 O(n^2)。

空間復(fù)雜度分析:

  • 使用了額外的數(shù)組 output 來存儲結(jié)果,空間復(fù)雜度為 O(n)。

2. 解法二:左右乘積列表

解法二利用兩個輔助數(shù)組,分別記錄每個元素左側(cè)和右側(cè)的乘積。具體步驟如下:

public int[] productExceptSelf(int[] nums) {
   int n = nums.length;
   int[] output = new int[n];
   
   int[] leftProducts = new int[n];
   int[] rightProducts = new int[n];
   
   leftProducts[0] = 1;
   for (int i = 1; i < n; i++) {
       leftProducts[i] = leftProducts[i - 1] * nums[i - 1];
  }
   
   rightProducts[n - 1] = 1;
   for (int i = n - 2; i >= 0; i--) {
       rightProducts[i] = rightProducts[i + 1] * nums[i + 1];
  }
   
   for (int i = 0; i < n; i++) {
       output[i] = leftProducts[i] * rightProducts[i];
  }
   
   return output;
}

時間復(fù)雜度分析:

  • 第一個循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 第二個循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 第三個循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 總體時間復(fù)雜度為 O(n)。

空間復(fù)雜度分析:

  • 使用了兩個輔助數(shù)組來存儲左側(cè)和右側(cè)的乘積,空間復(fù)雜度為 O(n)。

3. 解法三:空間優(yōu)化

解法三對解法二進(jìn)行了空間優(yōu)化,只使用一個輔助數(shù)組來記錄左側(cè)的乘積,并在計算右側(cè)乘積時即時更新結(jié)果。具體步驟如下:

public int[] productExceptSelf(int[] nums) {
   int n = nums.length;
   int[] output = new int[n];
   
   output[0] = 1;
   for (int i = 1; i < n; i++) {
       output[i] = output[i - 1] * nums[i - 1];
  }
   
   int rightProduct = 1;
   for (int i = n - 1; i >= 0; i--) {
       output[i] *= rightProduct;
       rightProduct *= nums[i];
  }
   
   return output;
}

時間復(fù)雜度分析:

  • 第一個循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 第二個循環(huán)遍歷數(shù)組,時間復(fù)雜度為 O(n)。
  • 總體時間復(fù)雜度為 O(n)。

空間復(fù)雜度分析:

  • 只使用了一個輔助數(shù)組來存儲左側(cè)的乘積,空間復(fù)雜度為 O(n)。

結(jié)論

本文介紹了題目"除自身以外數(shù)組的乘積"的詳細(xì)描述,并給出了三種解法:暴力法、左右乘積列表和空間優(yōu)化。下面是它們的時間和空間復(fù)雜度的總結(jié):

解法

時間復(fù)雜度

空間復(fù)雜度

暴力法

O(n^2)

O(n)

左右乘積列表

O(n)

O(n)

空間優(yōu)化

O(n)

O(n)

從復(fù)雜度分析可以看出,解法二和解法三都能夠在線性時間內(nèi)完成計算,而且空間復(fù)雜度也相對較低。因此,解法二和解法三是更優(yōu)的解決方案。

在實際應(yīng)用中,根據(jù)具體的問題和要求,選擇合適的解法可以提高算法的效率和性能。希望本文能夠幫助讀者理解和掌握解決"除自身以外數(shù)組的乘積"問題的不同解法,并在實際編程中得到應(yīng)用。如果想要了解更多數(shù)組相關(guān)的問題和解法,建議進(jìn)一步學(xué)習(xí)相關(guān)的算法和數(shù)據(jù)結(jié)構(gòu)知識。


網(wǎng)站欄目:除自身以外數(shù)組的乘積:三種解法及Java代碼示例
新聞來源:http://www.dlmjj.cn/article/cojejcp.html