寻找subarray sum的起止index

思路:用map.put(cur_sum, i); 动不动就break

 

一开始设置end = -1是因为没找到

 

https://www.geeksforgeeks.org/find-subarray-with-given-sum-in-array-of-integers/

 

// Java program to print subarray with sum as given sum 
import java.util.*; 

class GFG { 

    public static void subArraySum(int[] arr, int n, int sum) { 
        //cur_sum to keep track of cummulative sum till that point 
        int cur_sum = 0; 
        int start = 0; 
        int end = -1; 
        HashMap<Integer, Integer> hashMap = new HashMap<>(); 

        for (int i = 0; i < n; i++) { 
            cur_sum = cur_sum + arr[i]; 
            //check whether cur_sum - sum = 0, if 0 it means 
            //the sub array is starting from index 0- so stop 
            if (cur_sum - sum == 0) { 
                start = 0; 
                end = i; 
                break; 
            } 
            //if hashMap already has the value, means we already 
            // have subarray with the sum - so stop 
            if (hashMap.containsKey(cur_sum - sum)) { 
                start = hashMap.get(cur_sum - sum) + 1; 
                end = i; 
                break; 
            } 
            //if value is not present then add to hashmap 
            hashMap.put(cur_sum, i); 

        } 
        // if end is -1 : means we have reached end without the sum 
        if (end == -1) { 
            System.out.println("No subarray with given sum exists"); 
        } else { 
            System.out.println("Sum found between indexes "
                            + start + " to " + end); 
        } 

    } 

    // Driver code 
    public static void main(String[] args) { 
        int[] arr = {10, 2, -2, -20, 10}; 
        int n = arr.length; 
        int sum = -10; 
        subArraySum(arr, n, sum); 

    } 
} 
View Code

 

 
posted @ 2020-10-31 05:28  苗妙苗  阅读(76)  评论(0编辑  收藏  举报