各個元素之和等於給定值的連續子數組的個數


給定一個數組arr,給定一個數target。求,各個元素之和等於target的連續子數組的個數,時間復雜度為O(N),空間復雜度也為O(N)

借助一個Map即可實現。Map中保存的是:從arr的最左側元素(也就是下標為0的元素)開始,到當前位置為止,所有元素的和出現的次數。

 1 private int getNumOfSubThatSumIsTarget(int[] arr, int target) {
 2     Map<Integer, Integer> map = new HashMap<>();
 3     map.put(0, 1);
 4     
 5     int result = 0;
 6     int curSum = 0;
 7     for (int i = 0; i < arr.length; ++i) {
 8         curSum += arr[i];
 9         
10         result += map.getOrDefault(curSum - target, 0);
11         
12         map.put(curSum, map.getOrDefault(curSum, 0) + 1);
13     }
14     
15     return result;
16 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM