• 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);
    }
    
  • 相关阅读:
    Android Intent Service
    Android-Window(一)——初识Window
    立FLAG-书单
    Typecho-Material主题不支持Kotlin代码高亮的解决方案
    【翻译】What is State Machine Diagram(什么是状态机图)?
    【翻译】 What is class diagram(什么是类图)?
    Android-Selector不起作用
    git 命令
    远程分支回退方法
    mac 显示隐藏文件
  • 原文地址:https://www.cnblogs.com/fyusac/p/14846676.html
Copyright © 2020-2023  润新知