zoukankan      html  css  js  c++  java
  • leetcode 525 连续数组

    给定一个二进制数组 nums , 找到含有相同数量的 01 的最长连续子数组,并返回该子数组的长度。

    示例 1:

    输入: nums = [0,1]
    输出: 2
    说明: [0, 1] 是具有相同数量0和1的最长连续子数组。

    示例 2:

    输入: nums = [0,1,0]
    输出: 2
    说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
    package com.example.lettcode.hashtable;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @Class FindMaxLength
     * @Description 525 连续数组
     * @Author
     * @Date 2021/6/3
     **/
    public class FindMaxLength {
    
        /**
         * 前缀和+ 哈希
         *
         * @param nums
         * @return
         */
        public static int findMaxLength(int[] nums) {
            if (nums == null || nums.length == 0) return 0;
            int sum = 0;
            int n = nums.length;
            // 最大长度
            int maxLength = 0;
            // 保存到i位置的数组和以及对应的位置
            Map<Integer, Integer> integerMap = new HashMap<>();
            // 初值,目的是为了得到从下标0开始的连续数组长度
            integerMap.put(0, -1);
    
            for (int i = 0; i < n; i++) {
                //把所有num[i]为0当成-1,这样子这个最长连续子数组总和就是0
                sum += nums[i] == 1 ? 1 : -1;
                // Map 中以及包含了key值为sum的元素,说明从其对应的value位置开始到i位置之间是符合要求的连续数组
                if (integerMap.containsKey(sum)) {
                    maxLength = Math.max(i - integerMap.get(sum), maxLength);
                } else {
                    integerMap.put(sum, i);
                }
            }
            return maxLength;
        }
    
    }
    
    // 测试用例
    public static void main(String[] args) {
    	int[] nums = new int[]{0, 1};
    	int ans = FindMaxLength.findMaxLength(nums);
    	System.out.println("FindMaxLength demo01 result : " + ans);
    
    	nums = new int[]{0, 1, 0};
    	ans = FindMaxLength.findMaxLength(nums);
    	System.out.println("FindMaxLength demo02 result : " + ans);
    }
    
  • 相关阅读:
    phpfpm进程数设置多少合适
    GitLab的安装及使用教程
    男人的中年危机坏在哪?(转载)
    让敏捷落地,从“认识自我”开始
    优化你的架构设计
    工作中的那点事儿是工作经验,还是思路给了你生存的能力(原创)
    窗口过程处理WndProc遇到的问题
    CodeBlocks 10.0+OpenCV 2.4.0配置方法
    OpenCV在VS2010下永久性配置
    Win8下的STCISP下载问题解决
  • 原文地址:https://www.cnblogs.com/fyusac/p/14846676.html
Copyright © 2011-2022 走看看