zoukankan      html  css  js  c++  java
  • 523. Continuous Subarray Sum

    Given a list of non-negative numbers and a target integer k, 
    write a function to check if the array has a continuous subarray of size at least 2 that
    sums up to the multiple of k, that is, sums up to n*k where n is also an integer. Example 1: Input: [23, 2, 4, 6, 7], k=6 Output: True Explanation: Because [2, 4] is a continuous subarray of size 2 and sums up to 6. Example 2: Input: [23, 2, 6, 4, 7], k=6 Output: True Explanation: Because [23, 2, 6, 4, 7] is an continuous subarray of size 5 and sums up to 42. Note: The length of the array won't exceed 10,000. You may assume the sum of all the numbers is in the range of a signed 32-bit integer.

    这种考subarray sum 常用到累加和数组啊, 要清楚从哪到哪开始求和, 在看题意怎么判断就ok了, 数组subarray sum 问题常常用累加和基础上改变

    public boolean checkSubarraySum(int[] nums, int k) {
            int n = nums.length;
            if (n == 0 || nums == null || n < 2) {
                return false;
            }
            int sum = 0;
            for (int i = 0; i < n - 1; i++) {
                sum = nums[i];
                for (int j = i + 1; j < n; j++) {
                    sum += nums[j];
                    if (helper(sum, k)) return true;
                }
            }
            return false;
            
        }
        private boolean helper(int sum, int k) {
            if (k == 0) {
                if (sum == 0) return true;
            } else if (sum % k == 0) {
                return true;
            }
            return false;
        }
    

    没想到用hashmap O(n) 即可, 关键是存的都是k的余数, 然后余数相见等于零即可 if (k != 0) runningSum %= k; 

    public boolean checkSubarraySum(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int runningSum = 0;
        for (int i=0;i<nums.length;i++) {
            runningSum += nums[i];
            if (k != 0) runningSum %= k; 
            if (runningSum == 0) {
                if (i > 0) {
                    return true;
                }
            }
            Integer prev = map.get(runningSum);
            if (prev != null) {
                if (i - prev > 1) return true;
            }
            else map.put(runningSum, i);
        }
        return false;
    }
    

      

     

  • 相关阅读:
    LeetCode 258 Add Digits
    LeetCode 231 Power of Two
    LeetCode 28 Implement strStr()
    LeetCode 26 Remove Duplicates from Sorted Array
    LeetCode 21 Merge Two Sorted Lists
    LeetCode 20 Valid Parentheses
    图形处理函数库 ImageTTFBBox
    php一些函数
    func_get_arg(),func_get_args()和func_num_args()的用法
    人生不是故事,人生是世故,摸爬滚打才不会辜负功名尘土
  • 原文地址:https://www.cnblogs.com/apanda009/p/7282060.html
Copyright © 2011-2022 走看看