zoukankan      html  css  js  c++  java
  • 算法11未排序数组中累加和为给定值的最长子数组系列问题补2

    描述

    给定一个无序数组arr,其中元素只能是1或0。求arr所有的子数组中0和1个数相等的最长子数组的长度 
    [要求]
    时间复杂度为O(n)O(n),空间复杂度为O(n)O(n)

    输入描述:

    第一行一个整数N,表示数组长度
    接下来一行有N个数表示数组中的数

    输出描述:

    输出一个整数表示答案

    示例1

    输入:
    5
    1 0 1 0 1
    
    输出:
    4

    思路

    定义一个平衡因子key,遇到一个1就自增,遇到一个0就自减。遍历数组更新这个平衡因子,用一个哈希表记录0~i位置的平衡因子,我们可以知道对于一段数组arr[0:j],如果它的平衡因子为balance,且存在某个前面的位置i<j,满足arr[0:i]的平衡因子也是balance,这就说明子数组arr[i+1:j]的0和1数量相等,平衡因子归零,可以更新一次长度。

    import java.util.Scanner;
    import java.util.HashMap;
    
    public class Main{
        
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            int[] arr = new int[n];
            for(int i=0;i<n;i++){
                arr[i] = scanner.nextInt();
            }
            
            HashMap<Integer,Integer> map = new HashMap<>();
            map.put(0,-1);
            int key=0,maxLen=0;
            for(int i=0;i<n;i++){
                key += arr[i]==0?-1:1;
                if(map.containsKey(key)){
                    maxLen = Math.max(maxLen,i-map.get(key));
                }else {
                    map.put(key,i);
                }
            }
          System.out.println(maxLen);
        }
    }
  • 相关阅读:
    用ssh从ubuntu系统向ubuntu系统服务器发送文件
    python import caffe失败的可能原因
    segnet caffe upsample top index 0 out of range
    出了问题检查下你的caffe 搭建步骤
    由于不能随便改路径,所以写在这里
    关于DatePicker设置MinDate和MaxDate的几个坑
    Socket I/O multiplexing
    STL_迭代器
    基本套接字
    STL_空间配置器(allocators)
  • 原文地址:https://www.cnblogs.com/sfnz/p/15788451.html
Copyright © 2011-2022 走看看