• 寻找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

     

     
  • 相关阅读:
    创建线程的几种方式(代码示例)
    关于多线程和异步
    c#面试题及答案
    《深入理解Android2》读书笔记(一)
    【转载】探探首页
    【转载】LruCache 源码解析
    【转载】LinearLayout 源码分析
    【转载】文件下载FileDownloader
    【转载】TabLayout 源码解析
    【转载】AsyncTask源码分析
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13905070.html
Copyright © 2020-2023  润新知