2015-01-03 32 views
-2

我是一名大學生,喜歡java.I知道核心c。問題出現在許多編碼競爭者中,比如codechef problem,spoj等,C++中的大多數編碼器代碼在java中佔用2或3 MB的存儲空間,相對1400 MB。例如,存儲兩個長度爲pow的數組(10,9),然後根據兩個數組中收集的數據執行特定的操作會在java中佔用大量內存。有沒有可能採用任何策略來優化代碼?例如爲什麼像c和C++這樣的程序使用比java程序更少的存儲

約束爲 'n' 的值:1≤N≤POW(10,9)

public void solve(InputReader in, PrintWriter out) { 
    try { 
     int n = in.nextInt(); 
     int k = in.nextInt(); 
     int[] time = new int[n]; 
     int[] profit = new int[n]; 
     int res = 0; 
     int max = 0; 
     for (int i = 0; i < n; i++) { 
      time[i] = in.nextInt(); 
      profit[i] = in.nextInt(); 
     } 
     for (int i = 1; i < n; i++) { 
      double v1 = ((int) k/((time[max]))) * (profit[max]); 
      double v2 = (((int) k/((time[i]))) * (profit[i])); 
      if (v1 < v2) { 
       max = i; 
      } 
     } 

     res = ((int) k/time[max]) * profit[max]; 
     out.println(res); 

    } catch (Exception ex) { 
     return; 
    } 
} 

EDITED 2017年8月24日 這是一個老問題,但是,我我現在添加更多信息。 看看下面的圖片:

enter image description here

在這裏,就連對610個最成功的答案,124頁是像C或C++語言的基礎上,他們獲得非常少的內存。

但是,當我看着java解決方案時,他們獲得的內存非常高。

java screenshot

作爲每@Peter答案,很顯然,存儲器將在任何語言被佔用,如果我們將其存儲在長度POW的陣列(10,9)

+1

如果您沒有比較您所比較的C或C++代碼,那麼我們無法在此處進行幫助。也許C/C++代碼使用不同的算法,真正的優化正在改變你的方法。你能並排發佈比較代碼,還是至少要評論你的代碼,以便我們知道它在做什麼以及它應該做什麼? – templatetypedef

回答

3

兩個陣列10^9將使用任何語言的GB內存。例如2 * int [10^9]需要8 GB內存,無論使用C還是Java。

真正的解決方案可能是根本不創建數組,因爲它們看起來並不需要。您可以在閱讀時處理數據。無論您使用Java還是C,它都將使用無內存。

+0

我有同樣的疑問。你可以提出一種方法,就像使用兩個掃描器對象或多個線程兩個訪問兩行同時處理每行的一部分交替。因此不需要兩個數組。 – Killer

+0

@mwshubham將第一個循環合併到第二個循環中。創建新的變量'timeI''timeMax'' profitI'' profitMax'而不是使用數組,刪除數組。 –

相關問題