zoukankan      html  css  js  c++  java
  • [LintCode] 1844. subarray sum equals k II

    Given an array of integers and an integer k, you need to find the minimum size of continuous subarrays whose sum equals to k, and return its length.

    if there are no such subarray, return -1.

    Example

    Example1

    Input: nums = [1,1,1,2] and k = 3
    Output: 2
    

    Example2

    Input: nums = [2,1,-1,4,2,-3] and k = 3
    Output: 2
    

    Notice

    the integer nums[i] may lower than 0

    Solution 1: O(N^2) TLE

    public class Solution {
        /**
         * @param nums: a list of integer
         * @param k: an integer
         * @return: return an integer, denote the minimum length of continuous subarrays whose sum equals to k
         */
        public int subarraySumEqualsKII(int[] nums, int k) {
            // write your code here
            int[] prefix = new int[nums.length];
            for (int i = 0; i < nums.length; i++) {
                if (i == 0) {
                    prefix[i] = nums[i];
                    continue;
                }
                prefix[i] = prefix[i - 1] + nums[i];
            }
            System.out.println(Arrays.toString(prefix));
            
            int res = Integer.MAX_VALUE;
            for (int i = 0; i < nums.length; i++) {
                for (int j = i; j < nums.length; j++) {
                    if (i == 0) {
                        if (prefix[j] == k) {
                            res = Math.min(res, j + 1);
                        }
                        continue;
                    }
                    if (prefix[j] - prefix[i - 1] == k) {
                        res = Math.min(res, j - i + 1);
                    }
                }
            }
            return res == Integer.MAX_VALUE ? -1 : res;
        }
    }

    Solution 2:

    public class Solution {
        /**
         * @param nums: a list of integer
         * @param k: an integer
         * @return: return an integer, denote the minimum length of continuous subarrays whose sum equals to k
         */
        public int subarraySumEqualsKII(int[] nums, int k) {
            // write your code here
            Map<Integer, Integer> map = new HashMap<>();
            int sum = 0;
            int res = Integer.MAX_VALUE;
            map.put(0, -1);
            
            for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                if (map.containsKey(sum - k)) {
                    // actually get the i - 1 index for  map.get(sum - k)
                    res = Math.min(res, i - map.get(sum - k));
                }
                map.put(sum, i);
            }
            return res == Integer.MAX_VALUE ? -1 : res;
        }
    }
  • 相关阅读:
    webpack debug
    linux下光标操作
    windows 下 基于express搭建 https协议的网站
    js里的null 与undefined
    scrollIntoView 前的元素滚动到浏览器窗口的可视区域内 不止垂直滚动,还有水平滚动
    js 四舍五入实现
    react 踩坑记
    String.slice
    sublime 常用插件
    springcloud 自己挖坑 @ConfigurationProperties不生效
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12515155.html
Copyright © 2011-2022 走看看