」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java 中具有給定總和的子數組的不同方法

Java 中具有給定總和的子數組的不同方法

發佈於2024-11-06
瀏覽:657

Subarray with given sum in Java with different approaches

尋找具有給定總和的子數組是編碼面試和競爭性程式設計中經常出現的常見問題。這個問題可以使用各種技術來解決,每種技術在時間複雜度和空間複雜度方面都有自己的權衡。在本文中,我們將探索多種方法來解決在 Java 中尋找具有給定總和的子數組的問題。

問題陳述

給定一個整數數組和一個目標和,在數組中找到一個連續的子數組,其總和等於給定的和。這個問題可以分為兩個主要變體:

  1. 包含正數的子數組:數組僅包含正數。
  2. 混合數字子數組:數組同時包含正數和負數。

讓我們來探索解決這些變體的不同方法。

方法一:使用暴力破解

暴力方法涉及檢查所有可能的子數組併計算它們的總和,看看它們中是否有任何一個等於目標總和。這種方法適用於兩種變體,但由於其二次時間複雜度,對於大型數組效率較低。

執行

public class SubarraySumBruteForce {
  public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) {
    int n = arr.length;
    for (int start = 0; start 

輸出

Subarray found from index 1 to 3

分析

  • 時間複雜度: O(n²),因為兩個嵌套循環遍歷數組。
  • 空間複雜度: O(1),因為除了輸入陣列之外沒有使用額外的空間。

方法2:使用滑動視窗

滑動視窗方法對於僅包含正數的陣列非常有效。該技術涉及維護加起來達到目標總和的元素視窗。透過新增元素來擴展窗口,直到總和超過目標,並透過從頭開始刪除元素來縮小窗口,直到總和小於或等於目標。

執行

public class SubarraySumSlidingWindow {
  public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) {
    int start = 0;
    int currentSum = 0;

    for (int end = 0; end  targetSum && start 

輸出

Subarray found from index 1 to 3

分析

  • 時間複雜度: O(n),每個元素最多被處理兩次。
  • 空間複雜度: O(1),因為不需要額外的空間。
版本聲明 本文轉載於:https://www.tutorialspoint.com/subarray-with-given-sum-in-java-with-different-approaches如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3