zoukankan      html  css  js  c++  java
  • 560. Subarray Sum Equals K

    Given an array of integers and an integer k, 
    you need to find the total number of continuous subarrays whose sum equals to k. Example
    1: Input:nums = [1,1,1], k = 2 Output: 2 Note: The length of the array is in range [1, 20,000]. The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].

    fb: 只用返回true or false。第二题先用set做,后来让改用constant space, 就用了sliding window这样

    subarray sum 问题常用hashmap, 存count 值和坐标, 动归的感觉啊

     fb:问了数组包含/不包含负数两种情况,

    public int subarraySum(int[] nums, int k) {
            int sum = 0, result = 0;
            Map<Integer, Integer> preSum = new HashMap<>();
            preSum.put(0, 1);
            
            for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                if (preSum.containsKey(sum - k)) {
                    result += preSum.get(sum - k);
                }
    // 当加着加着出现两个一样的sum时, 要在他的value上加1, 因为可以有多个连续的串
                preSum.put(sum, preSum.getOrDefault(sum, 0) + 1);
            }
            
            return result;
    }
    

    要用 preSum.put(0, 1); 是得result 加的值可以来自map中的多个.

    不能 if (sum == k) {

    result++;
    }

    因为:

    Input:[0,0,0,0,0,0,0,0,0,0] 0
    Output:10
    Expected:55
     
    对比523. Continuous Subarray Sum, 0 的indice放-1, 0的count 放1;
    public boolean checkSubarraySum(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>(){{put(0,-1);}};;
        int runningSum = 0;
        for (int i=0;i<nums.length;i++) {
            runningSum += nums[i];
            if (k != 0) runningSum %= k; 
            Integer prev = map.get(runningSum);
            if (prev != null) {
                if (i - prev > 1) return true;
            }
            else map.put(runningSum, i);
        }
        return false;
    }
    

      对比subarray sum 

    public class Solution {
        public boolean isIsomorphic(String s, String t) {
            if (s==null || t==null || s.length() != t.length()) return false;
            HashMap<Character, Character> map = new HashMap<Character, Character>();
            for (int i=0; i<s.length(); i++) {
                if (!map.containsKey(s.charAt(i))) {
                    if (!(map.values().contains(t.charAt(i)))) {
                        map.put(s.charAt(i), t.charAt(i));
                    }
                    else return false;
                }
                else if (map.get(s.charAt(i)) != t.charAt(i)) return false;
            }
            return true;
        }
    }
    

      

     
  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/apanda009/p/7282555.html
Copyright © 2011-2022 走看看