尋找具有給定總和的子數組是編碼面試和競爭性程式設計中經常出現的常見問題。這個問題可以使用各種技術來解決,每種技術在時間複雜度和空間複雜度方面都有自己的權衡。在本文中,我們將探索多種方法來解決在 Java 中尋找具有給定總和的子數組的問題。
給定一個整數數組和一個目標和,在數組中找到一個連續的子數組,其總和等於給定的和。這個問題可以分為兩個主要變體:
讓我們來探索解決這些變體的不同方法。
暴力方法涉及檢查所有可能的子數組併計算它們的總和,看看它們中是否有任何一個等於目標總和。這種方法適用於兩種變體,但由於其二次時間複雜度,對於大型數組效率較低。
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分析
滑動視窗方法對於僅包含正數的陣列非常有效。該技術涉及維護加起來達到目標總和的元素視窗。透過新增元素來擴展窗口,直到總和超過目標,並透過從頭開始刪除元素來縮小窗口,直到總和小於或等於目標。
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分析
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3